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