Hallo,
ich bin die ganze Zeit am überlegen wie man am besten ein eigenes Berechtigungssystem aufbaut.
Auf meiner Seite befinden sich mehrere Bereiche, die nur einem limitierten Nutzerkreis zur Verfügung gestellt werden. Unterschiedliche Nutzer sollen dementsprechend pesonalisierte Funktionen und Daten bekommen.
Ich habe mir folgende Möglichkeiten überlegt:
1. Rollen (z.b. Administrator)
2. User (direkte Zuweißung der Rechte)
3. Gruppen (Sammlung von Mitgliedern)
4. Profile (Sammlung von Rechten)
Bei den Gruppen und den Profilen sollen es die Möglichkeit der Verschachtlung geben (Wie bei der Windowsbenutzerverwaltung wenn man etwas im Netzwerk frei gibt) und genau da komme ich nicht mehr weiter.
Meine Überlegung ist, alle Typen (Berechtigung, Bereich, Benutzer, Gruppe, Gruppenmitglieder, Rolle, Rollenberechtigung etc) in Tabellen mit ID's zu speichern und dann mit einem Typ Wert (Gruppe=1, User=2,Rolle=3,Bereich=4 ...) und der entsprechenden ID in einer Zwischentabelle zu verknüpfen. Also das es dann so etwas gibt wie:
Table 1
TableID, BaseID, BaseType, MemberID, MemberType
Table 2
Table1ID, BerechtigungsID
Damit wäre man flexible und könnte alle Typen miteinander verbinden.
Aber wie mache ich die Auswertung ob der Benutzer zugriff auf den Bereich hat oder nicht. Da es nicht mit einem einzelnen Select Befehl gemacht ist. (z.B. ob die Gruppe eine weitere Gruppe enthält und ob der User in einer der verschachtelten Gruppen Mitglied ist.)
Ist es am besten das ganze in einer Stored Procedure auf dem SQL System auszuwerten oder die ganzen Tabellen zu selektieren und mit PHP zu überprüfen?
Ich habe zu diesem Thema nicht sehr viel Erfahrung und komme nur auf die Überlegung mit vielen verschachtelten Select Befehlen und While Schleifen in der Stored Procedure. Aber ich bin mir nicht sicher wie es dann mit der Performance aussieht.
Vielleicht habe ich auch ein ganze falsches Bild von dem Thema. Gibt es dazu Tutorials, Berichte oder Beispiele die sich mit dem Theme der Benutzerverwaltung und dem Rechtesystem befassen und das nicht nur mit dem Speichern eines boolean in einer Session das zeigt ob der Benutzer eingeloggt ist oder nicht
danke,
style