asp.net identity récupère 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. Certains où en bas de cette page vous verrez cette ligne de code:

String[] roles = Roles.GetRolesForUser();

Renvoie tous les rôles de l'utilisateur actuellement connecté. Je me demandais comment accomplir cela avec le nouveau ASP.NET système D'identité?

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

40
demandé sur marc_s 2014-02-11 02:07:34

3 réponses

Controller.User.Identity est un ClaimsIdentity. Vous pouvez obtenir une liste de rôles en inspectant les revendications...

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

--- mise à jour ---

Le 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();
81
répondu Anthony Chu 2014-02-11 17:03:15

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();
    }
9
répondu LawMan 2014-12-05 20:48:52

N'utilisez pas @using System.IdentityModel.Claims namespace, au lieu de cette utilisation

@ Utilisation du système.Sécurité.Les revendications

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

}
1
répondu Abdul Rahim 2018-04-09 12:59:17