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

后端 未结 8 808
日久生厌
日久生厌 2020-12-04 17:47

I understand that a good way to check if an user is in a role is:

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

}

However How can I check if my user is

相关标签:
8条回答
  • 2020-12-04 18:27

    I used the below code. In my case, I had a semi colon de-limited string as the parameter which is read from web.config. You may change the below code easily if you are passing a List.

    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()));
        }
    }
    

    In web.config:

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

    I used it like below in my page load:

    if (ActiveDirectoryGroup.IsInAnyRole(ConfigurationManager.AppSettings["ADGroup"]))
    {
      //do something
    }
    
    0 讨论(0)
  • 2020-12-04 18:33

    EDIT: Without coding each role, do it a LINQ extension method, like so:

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

    For usage, do:

    var roles = new List<string> { "Admin", "Author", "Super" };
    
    if (user.IsInAnyRole(roles))
    {
        //do something
    }
    

    Or without the extension method:

    var roles = new List<string> { "Admin", "Author", "Super" };
    var userRoles = Roles.GetRolesForUser(User.Identity.Name);
    
    if (userRoles.Any(u => roles.Contains(u))
    {
        //do something
    }
    
    0 讨论(0)
  • 2020-12-04 18:37

    What about this?

     if (User.Roles.Count() != 0)
         {
           //User is not in any role
         }else
         {
           //User is in at least one role
         }
    
    0 讨论(0)
  • 2020-12-04 18:41

    In my case i just have one role per user. So i did it like this:

    if (User.Roles.FirstOrDefault().RoleId == "7b433246-5881-4ace-bbaa-e5514191171c") {
        //Do something
    }
    
    0 讨论(0)
  • 2020-12-04 18:45

    There's no built-in way to check if a user is in multiple roles, but it's pretty trivial to create a nice extension method to handle it for you:

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

    Usage then is:

    if (User.IsInAnyRole("Admin", "Author", "SuperUser"))
    {
    
    }
    
    0 讨论(0)
  • 2020-12-04 18:47

    You can also use

    if(Roles.GetRolesForUser(model.UserName).Contains("Admin")){
    }
    
    0 讨论(0)
提交回复
热议问题