Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Gruppenrechteverwaltung

Hallo,

ich versuche gerade für eine Intranetseite eine Rechteverwaltung zu schreiben. Dies gestalltet sich allerdings als etwas komplexer weswegen ich ein par Denkanstöße bräuchte. Meine Rechteverwaltung soll ungefähr so aussesehn:

Code:                   In Zwischenablage kopieren (nur IE)
1">

jetzt soll das permission objekt alle rechte für $user speichern damit ich die rechte wie oben zu sehen abfragen kann. Ist auch weiterhin nicht so schwer. Nur kommt der Punkt ins Spiel das der User in verschiedenen Gruppen sein kann und sich jetzt die Rechte verschiedener Gruppen für z.b. "intranet.administration.* " überschneiden können. Jetzt wollt ich einfach mal wissen was am sinnvollsten wäre, wie ich diese Rechte dann auswerte. Ich habe über folgende Lösungen nachgedacht:

- Ich kombiniere einfach die Rechte, wobei sich die Frage stellt was höherwertig ist, das erlauben oder verbieten eines rechtes.
- oder ich habe eine Prioritätsliste für die Rechte, will heißen es werden nur die rechte der Gruppe genommen deren Priorität am höchsten sind

Wenn also jemand was ähnliches programmiert hat währe ich seht dankbar für Denkanstöße, da ich leider auf dem Thema bis jetzt kaum praktische Erfahrung habe.

mfg,

mathias
Hier gehts zum Orginal Eintrag "Gruppenrechteverwaltung" im Forum

Antworten

Vielleicht hilft dir ja das, ansonsten einfach mal nach ACL (Access Control List) suchen ...


2.

Hallo Mathias,

ich habe bereits mehrere Projekte mit Rechteverwaltung gemacht. Ich denke mal du wirst auf verschiedenen Wegen zu deinem Ziel kommen, aber ich kann dir trotzdem gerne meinen beschreiben:

Gelöst habe ich meine Rechteverwaltung über eine MySQL-Datenbank. Ich habe eine Tabelle mit Benutzerinfos (Name, Passwort, ...), eine Tabelle in der ich die n:n-Beziehung zwischen Benutzername und ACL-Gruppe herstelle und noch eine Tabelle in der ich die n:n-Beziehung zwischen ACL-Gruppe und den Inhalten meiner Homepage herstelle. Ist also der User "user" in der Gruppe "group" wird in der zweiten Tabelle ein Eintrag für diese Beziehung erstellt. In der 3. Tabelle definiere ich nun z.B. für die Startseite, dass diese mit der ACL-Group "group" und der ACL-Group "everybody" eingesehen werden darf. Die Abfrage, was der User letztendlich darf, übernimmt dann eine SQL-Abfrage (mit Join) quer über die 3 Tabellen. Meine Lösung klingt vielleicht im ersten Moment ziemlich komplex, aber das war die Lösung die sich mir am flexibelsten und von der Wartung her am einfachsten gezeigt hat.

Hoffe ich konnte weiterhelfen...

MfG
ghoststrike


3.

hi mathias,
ich hab das so gelöst das ich jedem recht einen binärwert zugewiesen habe 2,4,8,16,32,... also jeder wert hat nur an einer stelle eine 1. somit lassen sich in der summe recht rechtegruppen erstellen (z.B 2+8+16 = 26 => 11010).

Nimmt man jetzt an das die rechte eines users im gesamten 26 ergeben und ich brauche eine berechtigung für das recht mit der zahl 8 - nimmt man einfach 8 (1000) AND 26 (11010) = 1000 (true)

ist sicher keine paradelösung aber als denkanstoß...

mfg Christopher


4.

@lockhard: bei deinem system sollte man aber bitte nicht '+' verwenden sondenr den logischen operator '|' (also statt 2+8+16 dann 2 | 8 | 16). Das hat im gegensatz zu dem PLUS den vorteil, dass ich einem vorhandenen Recht "26" ein weiteres recht ohne überprüfung hinzufügen kann. "26+32" wäre ja noch kein problem. Aber "26+8" würde zu einem fehlerhaften ergebnis kommen. denn das ergebnis muss weiterhin 26 sein, da die 8 ja bereits enthalten war. mit "26 | 8" ist das ergebnis weiterhin 26.

Und statt dem AND würde ich auch das einfache "amp" verwenden.
also statt 8 AND 26 dann 8 & 26.


so long
Tom


5.

@phantOm
oops ;-)
klar muss das ne OR-Verknüpfung sein und ist ja auch so in meiner Rechteverwaltung.

danke. und die sache mit dem amp werd ich gleich mal ausprobieren ;-)


Hier gehts zum Orginal Eintrag "Gruppenrechteverwaltung" im Forum
 
phpforum.de | Impressum