web-dev-qa-db-de.com

ASP.NET-Identität "Rollenbasierte" Ansprüche

Ich verstehe, dass ich Ansprüche verwenden kann, um Aussagen über einen Benutzer zu treffen:

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

Aber wie sollte ich "rollenbasierte" Ansprüche aufbewahren? Zum Beispiel:

Der Benutzer ist ein Superadministrator.

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

Der Wertparameter "true" fühlt sich völlig überflüssig an. Wie kann diese Aussage sonst mit Behauptungen ausgedrückt werden?

15
davenewza

Dies wird bereits durch das Framework für Sie erledigt. Wenn der Benutzer angemeldet ist, werden alle Benutzerrollen als Ansprüche hinzugefügt, wobei Anspruchstyp ClaimTypes.Role ist und die Werte den Rollennamen haben. 

Wenn Sie IPrincipal.IsInRole("SuperAdmin") ausführen, prüft das Framework tatsächlich, ob der Anspruch mit dem Typ ClaimTypes.Role und dem Wert SuperAdmin beim Benutzer vorhanden ist.

Sie müssen also nichts Besonderes tun. Fügen Sie einfach einen Benutzer zu einer Rolle hinzu.

24
trailmax

Sie können Rollen mit ClaimType Rolle speichern.

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

Sie müssen die Rolle in einem Anspruch mit einem Typ von ClaimsType.Role angeben und anschließend den Anspruchstyp angeben, der die Rolle in ClaimsIdentity enthält (siehe unten).

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

Dadurch können Sie das [Authorize(Roles = "SuperAdmin")]-Attribut in Ihren Controllern verwenden.

1
Macey41