如何检查用户是否处于具有MVC4简单成员资格的几个不同角色中的任何一个?

35 .net c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我知道检查用户是否在角色中的一个好方法是:

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

}
Run Code Online (Sandbox Code Playgroud)

但是,如何检查我的用户是否处于"作者","管理员"或"超级"角色之一?有没有办法在不为每个角色编写"User.IsInRole"的情况下执行此操作?

mat*_*mmo 46

编辑:没有编码每个角色,做一个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));
}
Run Code Online (Sandbox Code Playgroud)

使用方法请:

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

if (user.IsInAnyRole(roles))
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

或者没有扩展方法:

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

if (userRoles.Any(u => roles.Contains(u))
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)


Pau*_*ner 44

没有内置的方法来检查用户是否处于多个角色,但创建一个很好的扩展方法来为您处理它是非常简单的:

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

用法是:

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

}
Run Code Online (Sandbox Code Playgroud)

  • 可以缩短extension方法以返回roles.Any(principal.IsInRole); (4认同)