2014-02-10 10 views
36

Ich erstellte ein rollenbasiertes Menü, für das ich this Tutorial folgte. Einige wo unten die Seite Sie diese Codezeile sehen werden:asp.net Identität erhalten alle Rollen des angemeldeten Benutzers

String[] roles = Roles.GetRolesForUser(); 

Es gibt alle Rollen des aktuell angemeldeten Benutzers. Ich habe mich gefragt, wie ich das mit dem neuen ASP.NET Identity-System erreichen kann?

Es ist immer noch ziemlich neu und es gibt nicht viel zu finden.

Antwort

71

Controller.User.Identity ist ein ClaimsIdentity. Sie können eine Liste der Rollen erhalten, indem die Ansprüche Inspektion ...

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

--- --- Update

Brechen es nach unten ein wenig mehr ...

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(); 
+0

Nach diesem doc http://msdn.microsoft.com/en-us/library/system.identitymodel.claims.claimtypes%28v=vs.110%29.aspx gibt es keine 'Role' in 'ClaimTypes'. Muss ich es oder etwas hinzufügen? – Quoter

+0

ASP.NET Identity verwendet 'System.Security.Claims.ClaimTypes' http://msdn.microsoft.com/en-us/library/system.security.claims.claimtypes(v=vs.110).aspx. Außerdem hat das Objekt "ClaimsIdentity" auch die Eigenschaft "RoleClaimType", die denselben Wert enthält und Sie stattdessen verwenden können. –

+0

Könnten Sie Ihre Antwort aktualisieren, um mir zu zeigen, wie das im Code aussehen wird? Ich habe ein paar Methoden versucht, aber ich sehe 'RoleClaimType' nicht. – Quoter

8

Hier ist eine Erweiterungsmethode der obigen Lösung.

public static List<string> Roles(this ClaimsIdentity identity) 
    { 
     return identity.Claims 
         .Where(c => c.Type == ClaimTypes.Role) 
         .Select(c => c.Value) 
         .ToList(); 
    } 
Verwandte Themen