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