Ich habe eine MVC-App und habe dafür einen benutzerdefinierten Rollenanbieter erstellt:
%Vor%Dies funktioniert sehr gut mit dem Beschränken des Zugriffs auf Controller und Aktionen mit:
%Vor%über dem Controller oder der Aktion.
Ich möchte auch eingeschränkten Zugriff auf einige Dinge in der Ansicht, obwohl mit:
%Vor%Diese Methode gehört nicht zu meinem Rollenanbieter, wird aber nicht überschrieben.
Weiß jemand, wie man es auch für diese Methode macht?
Wenn Sie Ihren RoleProvider als Rollenanbieter für die Anwendung in web.config angeschlossen haben, sollte dies automatisch funktionieren. Das Framework erstellt zu Beginn der Anfrage ein RolePrincipal
für einen authentifizierten Benutzer, der die Methode GetRolesForUser
für Ihren Rollenanbieter aufruft und den Namen aus dem IIdentity
als Benutzernamen übergibt.
Die Framework-Implementierung von RolePrincipal
s IsInRole(string role)
Methode ist in etwa so (ich habe Kommentare hinzugefügt)
Setzen Sie einen Haltepunkt innerhalb Ihrer RoleProvider GetRolesForUser
-Methode, um sicherzustellen, dass er korrekt aufgerufen wird, und überprüfen Sie auch die IPrincipal
( HttpContext.Current.User
), um sicherzustellen, dass sie vom Typ RolePrincipal
für einen authentifizierten Benutzer ist / p>
Tut mir leid, ich bin zu spät zur Party hier;
Zum Nutzen anderer Leute mit dem gleichen Problem - Russ Cams Antwort ist genau richtig, um die Antwort zu finden .
In meinem Fall hatte mein benutzerdefinierter roleManager nicht 'enabled="true" und cacheRolesInCookie="true". Dies schien zu verhindern, dass GetRolesForUser aufgerufen wurde.
Arbeitscode Für die Datei web.config:
%Vor%Wirklich gutes Tutorial zu diesem Thema unter Ссылка
Tags und Links asp.net-mvc authentication