Hallo zusammen,
ich brauche einen Denkanstoß zum Thema Rechteverwaltung in meiner Datenbank und Tips, ob mein Ansatz richtig ist (auch was die Performance betrifft).
Ich bin gerade dabei, die Datenbank für ein e-Learning-System zu planen.
Es gibt verschiedene Gruppen, die in einer hierarchischen Struktur angelegt sind, zum Beispiel:
Code:
- Stamm-Kunde1-Untergruppe1
-Untergruppe2
-Kunde2
usw.
Das ganze wollte ich entweder per Nested Sets oder per Closure-Table machen (ich streite noch mit mir, aber zu 80% wird es in Nested Sets realisiert) und den Baum mittels jsTree darstellen.
Dazu soll es dann noch Rollen geben, wie Administrator, Verwalter, Lerninhalt-Ersteller, Lerninhalt-Zuweiser, Schüler etc., denen die entsprechenden Rechte zugewiesen sind.
Dann sollen die Benutzer mit einer Rolle einer Gruppe zugewiesen werden, z.B. ein Benutzer soll die Rolle Verwalter für Kunde1 haben, was also auch bedeutet, dass er Untergruppe1 und Untergruppe2 verwalten darf (Benutzer anlegen/löschen z.B.), jeder Benutzer in Verwaltungsrollen darf auch den Baum sehen ab dem Punkt, ab dem er Rechte hat; Verwalter bei Kunde1 sieht also Kunde1, Untergruppe1 und Untergruppe2
Ein Schüler soll nur die Lerninhalte der Gruppe sehen können, der er zugewiesen wurde.
Auch sollen Benutzer verschiedene Rollen in verschiedenen Gruppen haben können, z.B. Verwalter bei Kunde1 und Schüler bei Untergruppe2.
Außerdem werden zu Gruppen, die Kunden darstellen noch in einer zusätzlichen Tabelle Informationen abgelegt wie Name des Kunden (also der Firma), Adresse, usw.
Tabellenstruktur wäre also nur für die Rechtestruktur vereinfacht wie folgt:
- Rechte (ID, Rechtname)
- Rollen (ID, Rollenname)
- Rollenrechte (Rechte.ID, Rollen.ID) - Zuweisungstabelle
- Gruppe (ID, Name, Left, Right)
- Benutzer (ID, Name)
- Zuw-Ben-Rolle-Gruppe (Benutzer.ID, Rollen.ID, Gruppe.ID)
Meine Fragen sind jetzt:
- Ist das Ganze so die richtige Vorgehensweise?
- Gibt es Performanceschwierigkeiten (Kundenanzahl wahrscheinlich irgendwann über 500)?
- Wie gestaltet man am besten das Anlegen eines neuen Benutzers (da ihm am Anfang ja nicht unbedingt eine Lerngruppe, wohl aber ein Kunde zugeordnet wird)? Meine Idee wäre, dass es eine Rolle "nicht zugeordnet" gibt, die nicht dazu berechtigt, den Baum und Unterverzeichnisse zu sehen.
- Wie handhabt man am besten die Administratoren? Sie müssten ja theoretisch als Rolle "Administrator" zur Gruppe Stamm zugeordnet werden. Ist das OK, wenn man die Administratoren in die gleiche Datenbankstruktur wie die Benutzer legt oder ist da eine andere Vorgehensweise besser?
Lieben Gruß
Broco