identité asp.net obtenir tous les rôles de l’utilisateur connecté

J’ai créé un menu basé sur les rôles pour lequel j’ai suivi ce tutoriel. Quelque part sur cette page, vous verrez cette ligne de code:

Ssortingng[] roles = Roles.GetRolesForUser(); 

Il renvoie tous les rôles de l’utilisateur actuellement connecté. Je me demandais comment accomplir cela avec le nouveau système d’identité ASP.NET?

C’est encore assez nouveau et il n’y a pas grand chose à trouver à ce sujet.

Controller.User.Identity est une ClaimsIdentity . Vous pouvez obtenir une liste de rôles en inspectant les réclamations …

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

— mettre à jour —

Briser un peu plus …

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

Voici une méthode d’extension de la solution ci-dessus.

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

N’utilisez pas l’espace de noms @using System.IdentityModel.Claims, à la place de cet usage

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