micholee: Rechteverwaltung

Beitrag lesen

Hi,

zum Thema "Flag" ...

Es ist eine Frage der Sichtweise. Du willst ja in einer Spalte die Betriebsarten als komma-separierte Liste speichern (r,w oder r). Damit reduzierst du zwar die Menge der gesamt gespeicherten Records aber du müsstes jeden einzelnen auswerten um zu sehen ob r, w oder beides gesetzt ist.

Genau. Ich könnte eigentlich mehrere Records für jedes einzelne r, w und x schreiben. (Fall ich das später feiner granulieren würde, also mehrs als die drei r, w,x, würde das ganze etwa durcheinander kommen)

Wenn ich alles in ein Record mache, könnte ich wie du bereits erwähnt hast komma-separiert alles in eine Spalte schreiben. Entweder, nur die erlaubten dort aufzählen, "r,w", "r" oder, wenn ich das mit Deny richtig verstanden habe, dann alle Buchstaben aufzählen "r,w,x" und in der Flag Tabelle, dann "1,1,0) oder Bitweise/Stellenweise aufsummieren (4,2,1)
Das hat aber einen Nachteil, wenn (aus welchem Grund auch immer) ein neuer Benutzungsmodi hinzukommen würde.

Solch ein boolsches Flag (für Deny/Allow) kannst du auch implizit haben indem du halt nur die erlaubten Benutzungsmodi speicherst, also nur r wenn schreiben nicht erlaubt sein soll.

siehe oben.

zum Thema "Benutzer und Gruppen"

Wenn ein Benutzer in mehreren (u.U. auch verschachtelten) Gruppen enthalten sein kann, solltest du diese Komplexität auflösen indem du eine Liste erstellst, in welcher der Benutzer mit allen seinen Gruppen aufgeführt ist.

Genau

Wenn der Benutzer auch einzeln Rechte erhalten kann, dann muss er in der Implementierung auch wie eine Gruppe behandelt werden können. Stell dir deine Zuordnungstabelle aus Benutzer/Gruppe, Rechten und Datei vor. Benutzer/Gruppe ist ein Name (denormalisiert) oder eine Id (normalisiert), aber du kannst für ein Feld in einer Tabelle keinen Fremdschlüssel auf 2 andere Tabellen haben. Also musst du entweder ohne Fremdschlüssel arbeiten, oder Benutzer und Gruppe stellen für die Überprüfung von Rechten genau dieselbe Rollen (sind also vom gleichen Entitätstyp) => sind also in derselben Tabelle abgelegt.

Genau, in einem Feld kann ein Fremdschlüssel nicht auf zwei andere Tabelle verweisen. Außer, man würde noch eine Spalte anlegen, an welche Tabelle das gemappt wird. Das macht aber wenig Sinn, dann könnte ich gleich zwei Spalten machen, einmal für Benutzer und einmal für Gruppen. Deshalb ist die Idee, dass ein einzelner Benutzer, bzw. ich/er selber eine Gruppe bin.

Aber der beste Rat ist: Probieren geht über Studieren. Probier eine oder mehrere Varianten aus, analysiere Vorteile, Nachteile, Aufwand. Evt. wirst du bei der einen oder anderen Variante irgendwo in eine Sackgasse geraten. Dann hast du dennoch etwas gelernt. ;-)

»

Dankeschön übrigens für alle die Tipps und Infos. Ich versuche viel zu lernen und zu probieren :-)

Grüße