2008-09-16 14 views
2

Kennt jemand einige gute Ressourcen im Zusammenhang mit der Einrichtung von hierarchischen Benutzerkontensystemen? Ich setze gerade eins auf und kämpfe mit etwas der komplizierteren Logik (besonders mit dem Ermitteln der Erlaubnis). Ich hatte gehofft, ich könnte einige Ressourcen finden, um mir zu helfen.Hierarchische Gruppenberechtigungen Theorie/Ressourcen?

Einige Hintergrund: Ich bin ein Benutzer-Account-System für ein Web-CMS erstellen, die eine verschachtelte Gruppenhierarchie ermöglicht. Für jede Gruppe kann der Zugriff auf Lesen, Schreiben, Hinzufügen und Löschen erlaubt werden (entweder explizit für diese Gruppe oder implizit durch eines ihrer Eltern). Als ob das nicht kompliziert genug wäre, erlaubt das System Benutzern auch, Mitglied mehrerer Gruppen zu sein. - Hier stecke ich fest. Ich habe alles eingerichtet, aber ich kämpfe mit der tatsächlichen Logik für die Bestimmung der Emissionen für einen bestimmten Benutzer.

Antwort

1

Sehen Sie sich die Berechtigungen in der Andrew File System. Es ermöglicht Benutzern, eigene Gruppen zu erstellen und zu verwalten, während sie selektiv Admin-Rechte und ACLs zuweisen. Sie können feststellen, dass viele der lästigen Details bereits in ihrem Modell für Sie ausgearbeitet wurden.

Edit: hier ist eine bessere Verbindung zu AFS Dokumentation:

http://www.cs.cmu.edu/~help/afs/index.html

Hier ist der Abschnitt Gruppen:

http://www.cs.cmu.edu/~help/afs/afs_groups.html

1

Ich habe genau dies vor und seine keine triviale Implementierung getan. Sie werden sich die SecurityPermission-Klasse ansehen wollen.

[http://msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]

ich das schon durch die Verwendung von XML getan habe (was ich nicht sicher bin ich wieder tun würde) und zu speichern, die XML als Berechtigungsliste innerhalb von SQL Server in einer XML-Spalte durch eine CLR gespeichert Proz. Das XML würde ein Element haben, das "Erlaubnis" genannt wird und dann wäre die Erlaubnis tatsächlich ein ENUM innerhalb des Codes. Jede Berechtigung war eine neue Implementierung der SecurityPermission-Klasse (oben verlinkt). Benutzer wurden an Gruppen gebunden, die im SQL-Server definiert wurden. Wenn der Benutzer zu Gruppen hinzugefügt/entfernt wurde, wurde das XML-Dokument aktualisiert, um anzuzeigen, welche Gruppen voneinander unterschieden wurden von.

Sobald sich der Benutzer anmeldet, werden die Benutzeranmeldeinformationen in den Anwendungsspeicher (Sitzung) geladen und dann entsprechend aufgerufen. Wenn die Autorisierung benötigt wird, wird das XMl im Anwendungsspeicher herunter geladen und über die "FromXML" -Methode in die SecurityPermission geladen. An diesem Punkt würde ich die folgenden Methoden verwenden, um festzustellen, ob der Benutzer die Berechtigung hatte:

  • Nachfrage
  • Intersect
  • Union
  • IsUnrestricted
  • IsSubsetOf

usw., usw. , etc.

An diesem Punkt nach dem Ausführen der Nachfrage konnte ich feststellen, ob der Aufrufer Zugriff entsprechend hatte, wie ich meine Sicherheitsroutinen in den SecurityPermissions implementiert.

Auch dies ist eine TON von Details, aber dies sollte Sie auf den richtigen Weg bringen.

einen Blick auf diesen Namensraum Nehmen Sie auch: [2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx „System.Security.Permissions“

+0

Hi @Donn das sieht wirklich interessant aus, klingt wie ein toller Blogbeitrag. Ich habe bemerkt, dass du das vor ein paar Jahren gepostet hast, aus deiner Erfahrung gibt es irgendetwas, was du jetzt anders angehen würdest? –

2

die Berechtigungen Stellen für eine bestimmte Gruppe als Bitmaske gesetzt. Durch ODER-Verknüpfung der Bitmasken erhalten Sie den resultierenden Berechtigungssatz.

Update für @ Alex:

Ich schrieb diese Antwort vor 3 Jahren, aber ich glaube, ich spielte damit auf die folgende ...

Von der Frage

eine verschachtelte Gruppenhierarchie . Jeder Gruppe kann der Zugriff auf Zugriff gewährt/verweigert werden (lesen, schreiben, hinzufügen und löschen) (entweder explizit für diese Gruppe oder implizit von einem ihrer Eltern). Als ob das nicht kompliziert wäre genug, das System ermöglicht auch Benutzern, Mitglieder von mehreren Gruppen zu sein. - Hier stecke ich fest. Ich habe alles eingerichtet, aber Ich habe Probleme mit der tatsächlichen Logik für die Bestimmung der Emissionen für einen gegebenen Benutzer.

Zuweisen eine Bitmaske des Gesamt Erlaubnis-Set aus einer Gruppe (oder Rolle) in dem System übereinstimmt, gefunden

z.B. 00 (mit zwei Bits bleibt es hier einfach!)

Das erste Bit überträgtund das zweite Permission B.

Jetzt sagen Gruppe A verleiht die folgende Berechtigung: 01.

... und sagen, dass Gruppe B den folgenden Berechtigungssatz erteilt: 10.

Um die resultierende Erlaubnis für einen Benutzer eingestellt bekommen in einer beliebigen Menge von Gruppen Sie eine logische OR auf den Berechtigungssatz Bit-Masken durchführen konnte:

Permission set for Group A 01 
Permission set for Group B 10 OR 
          ---- 
Resultant permission set  11 (i.e. both permission A and B are conferred) 

Ich weiß nicht, die Details des Systems des Fragestellers, aber das hier skizzierte System könnte erweitert werden, um unter Verwendung verschiedener logischer Operatoren unterschiedliche Gruppenzusammensetzungsverhalten zu erreichen.

+1

Hi @Ben, das sieht interessant aus, könntest du das vielleicht mit einem Mini-Beispiel erklären? Oder vielleicht ein Link zu einer nützlichen Ressource? –