J'ai créé un menu basé sur les rôles pour lequel j'ai suivi le tutoriel this . En bas de cette page, vous verrez cette ligne de code:
String[] 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 ASP.NET Identity?
C'est encore assez nouveau et il n'y a pas grand chose à trouver à ce sujet.
Controller.User.Identity
est un ClaimsIdentity
. Vous pouvez obtenir une liste des rôles en inspectant les revendications ...
var roles = ((ClaimsIdentity)User.Identity).Claims
.Where(c => c.Type == ClaimTypes.Role)
.Select(c => c.Value);
--- update ---
Décomposer 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<string> 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, au lieu de cela
@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";
}
Après avoir obtenu l'utilisateur d'identité de SignIn Manager, appelezGetRolesAsync sur UserManager et transmettez l'utilisateur d'identité en tant que paramètre. Il renverra la liste des rôles, l'identité de l'utilisateur inscrit à
var rolesList = await userManager.GetRolesAsync(identityuser).ConfigureAwait(false);