Frank (no reg): Rechteverwaltung

Beitrag lesen

Hallo, geht es darum ein Rechtesystem zu haben und zu benutzen? oder darum eines zu bauen (zu Lernzwecken)?

Wie wär's mit einem ACL Modell

ACL = Access Control List

Solch ein ACL besteht aus "Nodes" bzw. Einträgen, welche folgende Entitäten miteinander verbinden:

  • das Objekt, das beschützt werden soll (dein Toto/Todo - was auch immer das sein soll)
  • eine Referenz zu einer Benutzergruppe (Achtung: die können theoretisch auch verschachtelt werden)
  • eine Betriebsart bzw Benutzungsart, z.b. "Lesen" oder "Ändern"
  • ein Flag ALLOW oder DENY (wobei DENY immer Vorrang haben sollte)

(In Datenbankprosa also: ca. 1 Tabelle mit ca. 4 Spalten)

Ist eigentlich ein skalierbares generisches Konzept. Denn als Benutzergruppe käme auch in Frage: Ersteller/Eigentümer und "alle anderen". Man könnte klein Anfangen und nach und nach ausbauen.

d.h. beim Anlegen eines Todos/Totos müsste dann auch ein (oder mehr?) Eintrag/Einträge in solch eine handgestrickte ACL Tabelle gemacht werden.

Vererbungsmechanismen würde ich mal ausser Acht lassen.

Ein Benutzer müsste dann auf alle "Gruppen" gemappt werden, wo er Mitglied ist (das geht mit einfachen Joins und Union), zusätzlich (für den Fall dass er einzelberechtigt sein könnte) muss er selbst noch als "pseudo-Gruppe" auftreten.

Mit einer Abfage nach Benutzer, bzw Liste der Gruppen und natürlich dem Objekt und ggf Betriebsart (auch alles wieder nur JOIN) könntest du in Erfahrung bringen ob DENY oder ALLOW oder gar nix.

Wie du den Fall von nicht vorhandenen Rechten oder wiedersprüchlichen Rechten handhabst, ist dein Bier.

Ciao, Frank