web-dev-qa-db-fra.com

asp.net identity obtient tous les rôles de l'utilisateur connecté

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.

53
Quoter

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();
101
Anthony Chu

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();
    }
17
LawMan

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

}
2
Abdul Rahim

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);
1
Mak Ahmed