Mysql
 sql >> Datenbank >  >> RDS >> Mysql

DB-Schema für RBAC mit mehreren Rollenebenen

Meine Erfahrung beim Experimentieren mit einer benutzerdefinierten RBAC-Implementierung ist wie folgt:

  1. Sie lesen viel RBAC-Literatur und denken, dass Sie sie verstehen. Dann gehst du weiter und versuchst, es umzusetzen, nur um festzustellen, dass du es überhaupt nicht wirklich verstanden hast. Irgendwann wird es Sinn machen, wenn Sie im Projekt vorankommen.

  2. Basierend auf Ihrer Frage kennen Sie bereits die Unternehmensdomäne, auf die Sie RBAC anwenden möchten. Aber vergessen Sie vorerst die eigentlichen Geschäftsobjekte. Ihre RBAC-Implementierung sollte generisch sein, was bedeutet, dass Sie ein DB-Schema haben, das aus Rollen-, Benutzer-, Berechtigungs-, Vorgangs- usw.-Tabellen besteht. Dann haben Sie Objekte, die auf solche Tabellen abgebildet werden (Eins-zu-Eins-Beziehung).

Sobald Sie diese RBAC-Implementierung haben, kann sie für praktisch jede Geschäftsdomäne modelliert werden, wie z. B. eine von Ihnen erwähnte „Abteilung“.

Denken Sie nur daran, dass nicht alles perfekt ist ... Ich habe die aktuelle RBAC-Literatur erweitert/modifiziert/abgeleitet, um benutzerdefinierte Funktionen hinzuzufügen, die Leistung zu verbessern usw.

Ich habe eine Weile nicht daran gearbeitet, also hoffe ich, dass ich im Folgenden richtig liege:

  • Benutzer:Instanzen werden erstellt und in ihrer Sicherungstabelle gespeichert.
  • Rolle:Instanzen werden erstellt und in ihrer Sicherungstabelle gespeichert. Benutzern werden Rollen zugewiesen.

  • Berechtigung:Eine Berechtigung ist im Grunde eine Kombination aus einer Operation auf einem Objekt. Berechtigungen werden Rollen zugewiesen.

  • Operation:Eine Operation ist einfach alles, was Sie wollen. Es könnte CRUD (Erstellen, Lesen, Aktualisieren, Löschen) oder auch „Drucken“, „Suchen“ oder alles sein, was ein Mensch (oder System) an einem Objekt (oder einer Gruppe von Objekten) ausführen kann.

  • Objekt:Dies sind im Grunde alle Ihre Objekte, die Ihre Geschäftsdomäne bilden.

Für noch mehr Leistung könnten Sie Einschränkungen implementieren, um eine enorme Menge verschiedener Einschränkungen anzuwenden.

Mit diesem Framework sollten Sie Folgendes abbilden können:

  • Wer kann Benutzer einer Abteilung zuweisen?
  • Wer kann sie aus Abteilungen entfernen?
  • Wie viele Benutzer können in einer Abteilung sein
  • Welche Art von Benutzern (basierend auf ihren zugewiesenen Rollen) können in einer Abteilung sein
  • Welche Rollen können welche Operationen für eine Abteilung ausführen (erstellen, lesen, aktualisieren, löschen)
  • usw.