web-dev-qa-db-fra.com

Revendications "basées sur les rôles" d'identité ASP.NET

Je comprends que je peux utiliser des revendications pour faire des déclarations sur un utilisateur:

var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "Peter"));
claims.Add(new Claim(ClaimTypes.Email, "[email protected]"));

Mais comment dois-je stocker les revendications "basées sur les rôles"? Par exemple:

L'utilisateur est un super administrateur.

claims.Add(new Claim("IsSuperAdmin, "true"));

Le paramètre de valeur "true" est totalement redondant. Sinon, comment cette déclaration peut-elle être exprimée à l'aide de revendications?

15
davenewza

Ceci est déjà fait pour vous par le framework. Lorsque l'utilisateur est connecté, tous les rôles d'utilisateur sont ajoutés en tant que revendications, le type de revendication étant ClaimTypes.Role et les valeurs sont le nom du rôle. 

Et lorsque vous exécutez IPrincipal.IsInRole("SuperAdmin"), le framework vérifie si la revendication de type ClaimTypes.Role et la valeur SuperAdmin sont présentes sur l'utilisateur.

Donc, ne devez rien faire de spécial. Ajoutez simplement un utilisateur à un rôle.

24
trailmax

Vous pouvez stocker des rôles à l'aide de ClaimType Role

claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin"));
16
JCS

Vous devez spécifier le rôle dans une revendication avec un type ClaimsType.Role, puis spécifier le type de revendication contenant le rôle dans ClaimsIdentity, comme indiqué ci-dessous.

var claimsIdentity = new ClaimsIdentity(new[]
{
    new Claim(ClaimTypes.Email, "[email protected]"),
    new Claim(ClaimTypes.Name, "Peter"),
    new Claim(ClaimTypes.Role, "SuperAdmin"),
},
"ApplicationCookie", ClaimTypes.Email, ClaimTypes.Role);

Cela vous permettra ensuite d'utiliser l'attribut [Authorize(Roles = "SuperAdmin")] dans vos contrôleurs.

1
Macey41