ASP.NET: Berechtigung / Authentifizierungsarchitektur

8

Ich bin dabei, eine Authentifizierung in meiner ASP.NET-Anwendung mit den folgenden Anforderungen zu erstellen.

  • Ein Benutzer hat genau eine Rolle (d. h. Admin, SalesManager, Vertrieb, ....)
  • Eine Rolle verfügt über eine Gruppe von Berechtigungen für CRUD, die auf eine Teilmenge vorhandener Objekte zugreifen. I.e. "Der Vertrieb verfügt über die Berechtigungen CREAD, READ, WRITE für den Objekttyp" Produkte ", nicht jedoch für DELETE"
  • Irgendwie mag ich die Berechtigungen in einer Hierarchie mit Vererbung zu sein, so dass ich für z. B. Admin nicht alle verfügbaren Objekte angeben muss.
  • Das System muss die Frage "Hat der Benutzer X die Berechtigung, Y gegen das Objekt Z auszuführen" schnell beantworten können.
  • Alle Datenbank verwaltet (MSSQL), implementiert in C # / ASP.NET

Ich möchte Feedback zu diesen Anforderungen bekommen? Irgendwelche Ideen, wie dies mit ASP.NET Framework (so viel wie möglich) zu implementieren? (Ich bin aber auch daran interessiert zu erfahren, wie dies ohne Mitgliedschaften erreicht werden kann)

    
Niels Bosma 19.12.2008, 08:17
quelle

6 Antworten

6

Ich denke, Sie müssen hier eine Reihe von Berechtigungsabfrage-Methoden in Ihren Geschäftsobjekten oder Ihrem Controller implementieren. Beispiele: CanRead (), CanEdit (), CanDelete ()

Wenn die Seite gerendert wird, muss sie das Geschäftsobjekt abfragen und die vom Benutzer autorisierten Funktionen ermitteln und Funktionen basierend auf diesen Informationen aktivieren oder deaktivieren. Das Geschäftsobjekt kann wiederum Rollen oder zusätzliche Datenbankabfragen verwenden, um die Berechtigungen des aktiven Benutzers zu ermitteln.

Ich kann mir keine Möglichkeit vorstellen, diese Berechtigungen zentral zu deklarieren. Sie müssen in die Implementierung der Funktionen verteilt werden. Wenn Sie jedoch das Design verbessern möchten, können Sie die Abhängigkeitsinjektion verwenden, um Autorisierer in Ihre Geschäftsobjekte einzufügen und so die Implementierungen getrennt zu halten.

Es gibt Code, der dieses Modell in Rocky Lhotkas Buch verwendet. Die neue Version ist nicht in JoshRivers 19.12.2008, 22:00

quelle
2

Ich denke, eine der besten Implementierungen, von denen ich denke, dass sie Ihre Anforderungen erfüllen, ist hier dokumentiert . Das einzige Problem ist, dass es sich in NHibernate einklinkt, aber Sie können dies als Vorlage verwenden, um Ihre eigene Berechtigungsimplementierung zu erstellen und einfach in Ihr eigenes Ereignismodell statt in NHibernates Interceptors einzubinden.

Ich arbeite selbst an einem solchen System und werde es bloggen, sobald ich damit zufrieden bin.

    
Ryan Tomlinson 16.06.2009 13:13
quelle
1

Die seit ASP.NET 2.0 bereitgestellte Mitgliedschafts-API sollte Ihren Anforderungen entsprechen. Das einzige, was ich befürchte, dass es nicht direkt unterstützt, sind hierarchische Rollen. Sie können jedoch die normale rollenbasierte Sicherheit problemlos mit einer anderen manuell geschriebenen hierarchischen Rollentabelle verwenden, um die erforderlichen Dinge zu erreichen.

    
Mehrdad Afshari 19.12.2008 08:19
quelle
1

Lesen Sie hier, wie Sie die ASP.NET-Mitgliedschaft einrichten: Ссылка

Sie können Ordner / Seiten usw. in Gruppen / Benutzer gruppieren. Ich denke, Sie werden das ausreichend finden!

Das Hiarchy wird leicht verwaltet, indem die generierten Datenbanken und Prozeduren erweitert werden.

    
Filip Ekberg 19.12.2008 08:21
quelle
1

Ich habe ein Projekt auf CodePlex erstellt, das will, dass Sie wollen: Ссылка

    
michael albaladejo 12.04.2010 13:06
quelle
0

Ich würde die Benutzer / Rollen-Beziehung so aufbauen, dass Benutzer mehr als eine Rolle haben können. Ich sehe eine 1-1-Beziehung und werde nervös, weil ich weiß, dass jemand, auch wenn wir jetzt keinen Bedarf dafür sehen, irgendwann möchte, dass jemand sowohl ein Sales-Benutzer als auch ein Customer Service-Benutzer ist.

>

In unserem Kundensystem verwenden wir Rollen, um Dinge wie "delinquentCustomer" zu überlagern. Auf diese Weise sind die ursprünglichen Berechtigungen noch gültig - sobald sie ihre Rechnung bezahlen. Es lohnt sich, diesen Ansatz zu betrachten.

    
Code Silverback 12.04.2010 14:07
quelle