2016-05-25 18 views
0

Ich versuche, ein komplexes Berechtigungsmanagementsystem mit Apache Shiro zu modellieren.Benutzerrollen vs. Benutzerberechtigungen mit Apache Shiro

Englisch nicht meine Muttersprache Ich fürchte, ich könnte einige der Feinheiten von Begriffen wie "Rollen", "Berechtigungen", "Rechte" & "Privilegien" fehlen.

Zum Beispiel sagen wir, ich möchte ein System erstellen, das Ressourcen wie Drucker innerhalb von Gebäuden verwaltet. Ein DB enthält Informationen darüber, welcher Drucker sich in welchem ​​Gebäude befindet. Benutzer dieses Systems sollten in der Lage sein, einen Drucker zurückzusetzen oder darauf zu drucken.

Es ist mir klar, dass einige Benutzer werden "Super Admins" und in der Lage sein, auf jeden Drucker zurücksetzen und drucken ('Drucker: *: *') - Ich denke, dass wir diese Leute ein "Super Administratorrolle ".

Aber was ist, wenn jemand die Drucker in einem bestimmten Gebäude zurücksetzen darf ('building: A: *')? Ist "Building Admin" eine (prarametrische) Rolle? oder ist das nur eine Erlaubnis für ein bestimmtes Gebäude? Wie würdest du das mit Apache Shiro modellieren?

n.b.
Beim Kennzeichnen dieser QI wurde der Benutzerrollen-Tag hinzugefügt, der besagt: "Eine Benutzerrolle ist eine Gruppe von Benutzern, die dieselben Berechtigungen oder Berechtigungen auf einem System haben. Verwenden Sie dieses Tag für Fragen zur Funktionsweise von Benutzerrollen in einer bestimmten Sicherheit Framework oder Fragen zur Implementierung von Benutzerrollen in Ihrem Programm. "

Wäre es richtig anzunehmen, dass basierend auf dieser Definition es keine Rolle als "Building Admin" gibt, da die Verwaltung von Gebäude A Ihnen nicht die gleichen Berechtigungen wie die Verwaltung von Gebäude B gibt? und wenn ja, was wäre die richtige Terminologie um einen "Building admin" zu beschreiben?

Antwort

1

Haben Sie in Erwägung gezogen, mehr als drei Tokens im WildCardPermission-Format zu verwenden?

Die Anzahl der Token, die verwendet werden können, ist unbegrenzt. Es liegt also an Ihrer Fantasie, wie diese in Ihrer Anwendung verwendet werden könnte.

WildCardPermission Javadoc

Anstelle der domain:action:instance Syntax häufig in Apache Shiro Beispielen und Dokumentation verwendet, könnten Sie ein anderes Zeichen hinzufügen, das Gebäude zu stellen, zum Beispiel printer:print,reset:*:buildingA. Der Nachteil dieses Schemas besteht darin, dass Sie bei der Überprüfung, ob eine Aktion für einen bestimmten Drucker zulässig ist, jetzt auch den Speicherort angeben müssen, auch wenn das Token für die Druckerinstanz diesen Drucker möglicherweise bereits eindeutig identifiziert :

// let's say the role for buildingA-admin has permission of "printer:*:*:buildingA" 

subject.isPermitted("printer:print:epson123:buildingA"); // returns true 
subject.isPermitted("printer:print:epson123"); // returns false 

Je nach Anwendungsdomäne, vielleicht eine Struktur wie buildingA:printer:print,reset:epson123 könnte sogar besser geeignet oder nützlich sein.


Um Ihre andere Frage in Bezug auf Benutzerrollen, beantworten würden Sie richtig anzunehmen, dass, wenn Sie beide buildingA-admin und buildingB-admin Rollen haben sie verschiedene Benutzerrollen sind, wenn die ihnen zugewiesenen Berechtigungen sind nicht die gleich.
Sie könnten eine allgemeine Benutzerrolle von Building Admin für Berechtigungen erstellen, die alle Administratoren für die verschiedenen Gebäude gemeinsam haben könnten, um zu vermeiden, dass diese Berechtigungen für die verschiedenen gebäudespezifischen Administratorrollen dupliziert werden.

+0

Danke. Ich werde diese Option prüfen müssen, da ich nicht sicher bin, was die Auswirkungen für meine eigene Domain wären. Zumal in meinem eigenen Bereich die "Drucker" zwischen "Gebäuden" verschoben werden können. – epeleg