如何检查,如果用户与MVC4成员简单的几个不同的角色中的任何一个?(How can I check

2019-07-18 14:37发布

据我了解,检查的好方法,如果一个用户在角色是:

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

}

不过,我如何检查我的用户是在“作者”之一,“管理员”或“超级”的角色? 有没有办法做到这一点无需编码“User.IsInRole”每个角色的

Answer 1:

编辑:如果没有编码的每个角色,做一个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
}


Answer 2:

有没有内置的方法来检查,如果用户是多个角色,但它是非常容易的创建一个不错的扩展方法来为您处理:

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

然后用法是:

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

}


Answer 3:

我想阐述一下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
}


Answer 4:

您还可以使用

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


Answer 5:

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


Answer 6:

请用这个简单的方法:

@using Microsoft.AspNet.Identity

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


Answer 7:

在我来说,我只需要每个用户一个角色。 所以,我没有这样的:

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


文章来源: How can I check if a user is in any one of a few different roles with MVC4 Simple membership?