Erstellen einer AuthorizeAttribute - was muss ich wissen?
Hier sind meine Anforderungen:
-
Ich werde sein das hinzufügen von Benutzern zu N-Menge der Rollen; in einer Datenbank definiert.
-
Muss ich schützen jeder controller-action mit meinem autorisieren Attribut.
Beispielsweise die web-Anwendung wäre zu überprüfen, ob der angemeldete Benutzer gehört zu einer dieser beiden Rollen und wenn Sie es tun, ich ließ Sie in. Wie kann ich sagen " aktivieren Attribut zum abrufen der Benutzer-Rollen aus einer Datenbank-Tabelle, die ich wählen?
[Authorize(Roles = "Admin, Technician")]
public ActionResult Edit(int id)
{
return View();
}
Ich habe versucht, Googeln für viele verschiedene Seiten, aber keiner scheint zu passen, was ich brauche, und sind übermäßig kompliziert.
Wenn die offizielle Dokumentation hat etwas, was ich lieben würde, zu finden es so gut, wie ich konnte nichts sehen, die ich verwenden könnte.
Irgendwelche Vorschläge?
Zum Beispiel, diese Frage hat eine sehr sauber aussehende Antwort, aber ich weiß nicht, ob es fertig ist oder etwas wichtiges fehlt.
ASP.NET MVC3-Rolle und Genehmigung Management -> Mit der Runtime-Berechtigung-Zuordnung
Bearbeiten
Es scheint, dass das, was ich eigentlich Suche ist die Erstellung einer benutzerdefinierten Rolle-provider, richtig? Ich müssen um diese Klasse zu implementieren und verwenden Sie es als meine Rolle Anbieter? Ich bin ziemlich neu in diesem, irgendwelche Gedanken?
http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gehen durch so ziemlich das gleiche Szenario in den letzten paar Wochen, so könnte dies helfen, jemand anderes im gleichen Boot. Mein Szenario ist eine MVC4-Anwendung im intranet eines Unternehmens mit den Benutzern in Active Directory gespeichert. Dies ermöglicht Windows-Authentifizierung geben single sign-on, so dass keine Notwendigkeit für die Formularauthentifizierung. Rollen sind in einer Oracle Datenbank gespeichert. Ich habe 3 Rollen:
Entschied ich mich für die asp.net Rolle-provider-api, um meine eigene AccountRoleProvider. Bisher habe ich nur 2 Methoden in diesem, GetRolesForUser und IsUserInRole:
Ich aktualisierte die web -.config, um meine Rolle Anbieter:
Dann erstellte ich 2 benutzerdefinierte Attribute aus AuthorizeAttribute, ReadOnlyAuthorize und CustomAuthorize.
ReadonlyAuthorize:
CustomAuthorize:
Den Grund für die 2 verschiedenen Attributen ist, dass ich eine Verwendung für die Readonly-Rolle, der alle Benutzer angehören muss, um Zugriff auf die app. Ich kann nur hinzufügen, das in der RegisterGlobalFilters Methode im Allgemeinen.asax, was bedeutet, es wird automatisch für jeden Controller:
Dann in der CustomAuthorize ich kann ein differenzierter und geben Sie die Rollen an, die ich will, und gelten für einen Controller oder eine einzelne Aktion, z.B. unten kann ich den Zugriff einschränken, um die Delete-Methode, um Benutzer in die Admin-Rolle:
Gibt es weitere Schritte, die ich ergreifen müssen, wie das aktualisieren der Benutzer-Objekt mit den Rollen, die der aktuelle Benutzer Mitglied ist. Dieser abgerufen werden die Rollen für den Benutzer einmal und nicht jedes mal in meine benutzerdefinierte Attribute und auch die User nutzen."IsInRole". So etwas sollte möglich sein, in Application_AuthenticateRequest in Gloal.asax:
Gibt es eine Reihe von Möglichkeiten, dies zu behandeln. Darin ist Methode und blowdarts (beide sehr qualifizierte Personen - einer von Ihnen ist ein Sicherheits-Autor) sind anständig in den link, den Sie zur Verfügung gestellt.
Eine Sache zu beachten ist der cache. Wenn Sie mit server-side-outputcache-caching, können Sie versehentlich cache etwas für einen Benutzer, wird zurückgegeben, um einem anderen Benutzer. Siehe:
OutputCache-und Autorisieren Filter in MVC3
und
Warum kann ich nicht kombinieren [Autorisieren] und [OutputCache] Attribute bei der Verwendung von Azure-cache (.NET MVC3 app)?
und
MVC Benutzerdefinierte Authentifizierung, Autorisierung, Rollen und Implementierung
weitere Infos und wie Sie zu behandeln Zwischenspeichern wenn Sie eine Autorisierung Attribut.
Verwenden Sie die Standard-Mitgliedschaftsanbieter und der rollenanbieter, sondern als Umsetzung Ihrer eigenen, aber Sie müssen auch verwenden Sie die Standardeinstellung asp.net Mitgliedschaft-Datenbank aspnetdb.mdf.
Sehen hier eine Exemplarische