Search code examples
c#asp.net-mvcroles

asp.net identity get all roles of logged in user


I created a role based menu for which I followed this tutorial. Some where down that page you'll see this line of code:

String[] roles = Roles.GetRolesForUser();

It returns all roles of the currently logged in user. I was wondering how to accomplish this with the new ASP.NET Identity system?

It's still pretty new and there is not much to find about it.


Solution

  • Controller.User.Identity is a ClaimsIdentity. You can get a list of roles by inspecting the claims...

    var roles = ((ClaimsIdentity)User.Identity).Claims
                    .Where(c => c.Type == ClaimTypes.Role)
                    .Select(c => c.Value);
    

    --- update ---

    Breaking it down a bit more...

    using System.Security.Claims;
    
    // ........
    
    var userIdentity = (ClaimsIdentity)User.Identity;
    var claims = userIdentity.Claims;
    var roleClaimType = userIdentity.RoleClaimType;
    var roles = claims.Where(c => c.Type == ClaimTypes.Role).ToList();
    
    // or...
    var roles = claims.Where(c => c.Type == roleClaimType).ToList();