Hi Frank,
Hallo, geht es darum ein Rechtesystem zu haben und zu benutzen? oder darum eines zu bauen (zu Lernzwecken)?
natürlich hauptsächlich um lernzwecke, später würde ich mich auch heranwagen und versuchen dies im kleinen umzusetzen. deshalb wäre es ja wichtig, dass man eine gute grundlage hat, die später auch problemlos erweiterbar und vor allem flexibel ist. Ich finde aber die Lösung von "Deus Figendi" sehr gut.
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)
Ich habe in mein Script geschaut. Es gibt ACL und Capability List. Capability List speichert zu jedem Benutzer die Datei und seine Rechte dazu. Ich speichere, wie du bereits erwähnst hast, das ganze etewa wie folgt:
Datei User/Gruppe Betriebsart Flag
liste_1 us3r w,r Für was man diesen Flag brauchen würde, weiß ich leider nicht
user_2 r -
foobar r -
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.
Der Eigentümer ist natürlich auch wichtig. Wenn man die Benutzergruppen verschachtelt, bzw. untereinander auch vererbt, dann denke ich, dass es schnell unübersichtlich wird. (Der administrative Aufwand später im Betrieb)
Bei den Todos überlege ich mir auch, ob ich es möglich machen soll, dass der Eigentümer, das Eigentüm übertragen kann oder jemand von der Gruppe, die Gruppenrechte ändern? (das wäre wiederum zu speziell, was die software, bzw. die Todos machen sollten/könnten)
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.
Das muss ich noch etwas mehr in mich wirken lassen
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.
Das DENY und ALLOW habe ich weiterhin nicht ganz verstanden. Durch die Betriebsart r oder w sage ich ja bereits, ob, bzw. was der Benutzer oder die Benutzergruppe machen darf. Wenn er nicht darf, taucht er eh nicht in der Liste zur Datei/Todo auf.
Wie du den Fall von nicht vorhandenen Rechten oder wiedersprüchlichen Rechten handhabst, ist dein Bier.
Genau :-) Danke nochmals für die guten Tipps