36

ユーザーが役割を果たしているかどうかを確認する良い方法は次のとおりです。

if (User.IsInRole("Admin"))
{

}

ただし、ユーザーが「作成者」、「管理者」、または「スーパー」のいずれかの役割を果たしているかどうかを確認するにはどうすればよいですか?各ロールに「User.IsInRole」をコーディングせずにこれを行う方法はありますか?

4

8 に答える 8

49

ユーザーが複数の役割を果たしているかどうかを確認する組み込みの方法はありませんが、それを処理するための優れた拡張メソッドを作成するのは非常に簡単です。

public static bool IsInAnyRole(this IPrincipal principal, params string[] roles)
{
    return roles.Any(principal.IsInRole);
}

その場合の使用法は次のとおりです。

if (User.IsInAnyRole("Admin", "Author", "SuperUser"))
{

}
于 2013-01-23T10:55:53.957 に答える
47

編集:各役割をコーディングせずに、次のようにLINQ拡張メソッドを実行します。

private static bool IsInAnyRole(this IPrincipal user, List<string> roles)
{
    var userRoles = Roles.GetRolesForUser(user.Identity.Name);

    return userRoles.Any(u => roles.Contains(u));
}

使用法については、次のようにします。

var roles = new List<string> { "Admin", "Author", "Super" };

if (user.IsInAnyRole(roles))
{
    //do something
}

または拡張メソッドなし:

var roles = new List<string> { "Admin", "Author", "Super" };
var userRoles = Roles.GetRolesForUser(User.Identity.Name);

if (userRoles.Any(u => roles.Contains(u))
{
    //do something
}
于 2013-01-23T10:53:09.413 に答える
1

使用することもできます

if(Roles.GetRolesForUser(model.UserName).Contains("Admin")){
}
于 2013-01-23T13:46:30.087 に答える
1

mattytommoの答えについて少し詳しく説明したかったのですが、これが私が使用するものです。

拡張方法:

public static bool IsInAnyRole(this IPrincipal user, string[] roles)
        {
            //Check if authenticated first (optional)
            if (!user.Identity.IsAuthenticated) return false;
            var userRoles = Roles.GetRolesForUser(user.Identity.Name);
            return userRoles.Any(roles.Contains);
        }

定数:

public static class Role
{
    public const string Administrator = "Administrator";
    public const string Moderator = "Moderator";
}

使用法:

if (User.IsInAnyRole(new [] {Role.Administrator,Role.Moderator}))
{
    //Do stuff
}
于 2014-01-31T16:48:30.420 に答える
0

以下のコードを使用しました。私の場合、web.configから読み取られるパラメーターとしてセミコロンで区切られた文字列がありました。リストを渡す場合は、以下のコードを簡単に変更できます。

public class ActiveDirectoryGroup
{
    public static bool IsInAnyRole(string adRoles)
    {
        return adRoles.Split(Convert.ToChar(";")).Any(role => !string.IsNullOrEmpty(role.Trim()) && HttpContext.Current.User.IsInRole(role.Trim()));
        //If list is passed use below
        //return listParameter.Any(role => !string.IsNullOrEmpty(role.Trim()) && HttpContext.Current.User.IsInRole(role.Trim()));
    }
}

web.configの場合:

<appSettings>
  <add key="ADGroup" value="Domain\Admin;Domain\Supervisor;Domain\Manager;" />
</appSettings>

私は私のページの読み込みで以下のようにそれを使用しました:

if (ActiveDirectoryGroup.IsInAnyRole(ConfigurationManager.AppSettings["ADGroup"]))
{
  //do something
}
于 2015-10-27T18:21:17.430 に答える
0

この簡単な方法を使用してください:

@using Microsoft.AspNet.Identity

@if (Request.IsAuthenticated)
{
    if (User.IsInRole("Administrator") || User.IsInRole("Moderator"))
    {
        ... Your code here
    }
}
于 2016-01-19T15:14:53.657 に答える
0

私の場合、ユーザーごとに1つの役割しかありません。だから私はこのようにしました:

if (User.Roles.FirstOrDefault().RoleId == "7b433246-5881-4ace-bbaa-e5514191171c") {
    //Do something
}
于 2016-06-09T15:00:32.880 に答える
0

次の解決策が機能するはずです。

 if (User.Roles.Count() != 0)
 {
   //User is not in any role
 } else
 {
   //User is in at least one role
 }
于 2020-05-02T20:21:45.990 に答える