如何检查用户是否具有 MVC4 简单成员身份的几个不同角色中的任何一个

本文关键字:任何一 几个 角色 身份 简单 用户 检查 何检查 是否 MVC4 成员 | 更新日期: 2023-09-27 17:55:14

我知道检查用户是否处于角色中的好方法是:

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

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

如何检查用户是否具有 MVC4 简单成员身份的几个不同角色中的任何一个

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

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

那么用法是:

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

编辑:在不对每个角色进行编码的情况下,使用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
}
您也可以

使用

if(Roles.GetRolesForUser(model.UserName).Contains("Admin")){
}
我想

详细说明一下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
}

我使用了下面的代码。就我而言,我有一个分号分隔字符串作为从 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
}

请使用这种简单的方法:

@using Microsoft.AspNet.Identity
@if (Request.IsAuthenticated)
{
    if (User.IsInRole("Administrator") || User.IsInRole("Moderator"))
    {
        ... Your code here
    }
}

就我而言,每个用户只有一个角色。所以我这样做了:

if (User.Roles.FirstOrDefault().RoleId == "7b433246-5881-4ace-bbaa-e5514191171c") {
    //Do something
}

以下解决方案应该有效:

 if (User.Roles.Count() != 0)
 {
   //User is not in any role
 } else
 {
   //User is in at least one role
 }