La identidad asp.net obtiene todos los roles del usuario conectado

Creé un menú basado en roles para el cual seguí este tutorial. En alguna parte de esa página verá esta línea de código:

String[] roles = Roles.GetRolesForUser(); 

Devuelve todas las funciones del usuario actualmente conectado. Me preguntaba cómo lograr esto con el nuevo sistema de identidad ASP.NET?

Todavía es bastante nuevo y no hay mucho que encontrar al respecto.

Controller.User.Identity es una ClaimsIdentity . Puede obtener una lista de roles inspeccionando los reclamos …

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

— actualización —

Rompiéndolo un poco más …

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

Aquí hay un método de extensión de la solución anterior.

  public static List Roles(this ClaimsIdentity identity) { return identity.Claims .Where(c => c.Type == ClaimTypes.Role) .Select(c => c.Value) .ToList(); } 

No use @using System.IdentityModel.Claims namespace, En lugar de ese uso

@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"; }