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.
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();
Here's an extension method of the above solution.
public static List<string> Roles(this ClaimsIdentity identity)
{
return identity.Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value)
.ToList();
}
Don't use @using System.IdentityModel.Claims namespace, Instead of that use
@using System.Security.Claims
@using System.Security.Claims
@using Microsoft.AspNet.Identity
@{
var claimsIdentity = User.Identity as System.Security.Claims.ClaimsIdentity;
var customUserClaim = claimsIdentity != null ? claimsIdentity.Claims.FirstOrDefault(x => x.Type == "cutomType") : null;
var customTypeValue= customUserClaim != null ? customUserClaim .Value : User.Identity.GetUserName();
var roleOfUser = claimsIdentity != null ? claimsIdentity.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Role).Value :"User";
}
After getting Identity User from SignIn Manager, callGetRolesAsync on UserManager and pass identity user as parameter. It will return of List of roles, identity user enrolled in
var rolesList = await userManager.GetRolesAsync(identityuser).ConfigureAwait(false);
来源:https://stackoverflow.com/questions/21688928/asp-net-identity-get-all-roles-of-logged-in-user