Wie man ein hierarchisches rollenbasiertes Zugangskontrollsystem entwickelt

Basic Angebot ist, haben wir eine benutzerdefinierte gebaut "kickstart" für unsere Projekte. Für diesen suchen wir am wiederherstellen der Benutzer-Kontrolle. Ich weiß, es gibt eine Menge von Fragen gibt, über die Allgemeinen rbac, aber ich finde keine, die auf hierarchischen rbac?

Unsere Anforderungen sind:

  • Rollen zugeordnet werden können, um eine Gruppe von Berechtigungen
  • Wenn die Rolle nicht über eine Erlaubnis, die Einreise, dann ist es automatisch verweigert
  • Um einem Benutzer das überschreiben von Berechtigungen
  • Ein Benutzer überschreiben von Berechtigungen ist entweder gewähren oder verweigern
  • Wenn ein Benutzer ausdrücklich verweigert eine Genehmigung, egal, welche Rollen sagen, "gewährt" dem überschreiben gewinnt.
  • Benutzer können mehrere Rollen haben
  • Rollen können Hierarchie
  • Rollen Erben von anderen Rollen (z.B. "Forum Super Moderator" - Rolle ist ein "Forum-Moderator" und ein "System-Betreuer" und den "Forum-Moderator" Rolle bereits erbt von der "Forum-User" - Rolle )
  • Rollen Erben von anderen Rolle gewähren oder verweigern ein Privileg, überschreiben Sie Ihrem Kind die Erlaubnis
  • Berechtigungen sind gruppiert durch "Modul" (z.B. ein "Blog" - Modul kann ein "Eintrag Bearbeiten" Berechtigung", und ein "Forum" - Modul kann ein "Eintrag Bearbeiten" - Berechtigung, und Sie werden nicht clash)
  • Es ist ein "Alles und Nichts" - Berechtigung automatisch gewährt vollen Zugriff

So, mit diesen Anforderungen aus dem Weg, hier ist, wie ich denke, es zu tun.

Tabelle: Benutzer

id            | int     | unique id

Tabelle: Rollen

id            | int     | unique id
-------------- | ---------------------------------------------
title         | varchar | human readable name

Tabelle: Berechtigungen

id            | int     | unique id
-------------- | ---------------------------------------------
module        | varchar | module name
-------------- | ---------------------------------------------
title         | varchar | human readable name
-------------- | ---------------------------------------------
key           | varchar | key name used in functions

Tabelle: Role_User

role_id       | int     | id from roles table
-------------- | ---------------------------------------------
user_id       | int     | id from users table

Tabelle: Permission_Role

id            | int     | unique id
-------------- | ---------------------------------------------
permission_id | int     | id from permissions table
-------------- | ---------------------------------------------
role_id       | int     | id from roles table
-------------- | ---------------------------------------------
grant         | tinyint | 0 = deny, 1 = grant

Tabelle: Permission_User

id            | int     | unique id
-------------- | ---------------------------------------------
permission_id | int     | id from permissions table
-------------- | ---------------------------------------------
user_id       | int     | id from users table
-------------- | ---------------------------------------------
grant         | tinyint | 0 = deny, 1 = grant

Naja, eigentlich ist das die Hälfte, der Teil, ich bin sicher, der Teil, den ich am stecken, ist die hierarchische Rollen.

Also, wie gestalte ich diese?
Meine Idee ist, dass zum speichern in der Datenbank Abfragen, ich bin gerade dabei zu bauen, die Erlaubnis matrix auf Anmeldung und speichern Sie es auf der Sitzung, so dass die Abfragen nicht zu einfach sein, da Sie nur einmal laufen bei jeder Anmeldung.

Das Problem, das ich sehe ist, dass ich bin gehen zu müssen, um zu wissen, die Hierarchie der Rollen, so kann ich beheben das geerbte Rollen-Berechtigungen, bevor ich beheben, die die Erben.

Berechtigungen Benutzer ist der einfache Teil, die pro-Benutzer-Berechtigungen sind im wesentlichen endgültig gelöst-Gruppe.

InformationsquelleAutor der Frage Hailwood | 2013-04-22

Schreibe einen Kommentar