Hallo,
mich würde interessieren, ob ich in folgender Überlegung Funktionsberechtigungen, Rollen und die Vererbung von Rollen designtechnisch gut umgesetzt habe.
Für mein CMS benutze ich Funktionsberechtigungen. An einem Punkt im System wird abgefragt, ob eine Funktion mit dem angegebenen Parameter überhaupt ausgeführt werden darf.
Diese Funktionalität ist Grundlegend und gilt somit für fast alle Funktionen im System, die über eine bestimmte Methode aufgerufen werden. Also auch für alle Extensions von Dritten.
Zum Beispiel: Darf ich die Funktion artikelBearbeiten() mit dem Parameter 4 ausführen? Also den Artikel mit der ID 4 bearbeiten?
Ich habe hier zunächst einmal mein Datenbankmodell beschrieben. Ich denke daran lässt sich das alles am einfachsten veranschaulichen.
Grundlegend verfügt jeder User über eine einzige Rolle (siehe Tabelle USERS). Diese bündelt Rechte. Des Weitern können Rechte Benutzern auch direkt zugeteilt werden.
Das ist sinnvoll, wenn es zum Beispiel darum geht einen eigenen Beitrag zu bearbeiten oder zu löschen. Die Zuteilung der Rechte an User oder an Rollen geschieht in der Tabelle RIGHT_BIND.
Wobei ich mir noch unsicher bin ist die Art und Weise wie Rollen bei mir Teile einer anderen Rolle werden können. (Ist Vererbung hier das richtige Wort?)Ich habe das in der Datenbank mit roll_parent beschrieben. Siehe Tabelle ROLLS.
Und eine andere Frage, die mich dahingehend beschäftigt ist das Ausmaß an Datenmengen, die meine Tabelle RIGHT_BIND annehmen würde. So würde zum Beispiel dort für jeden User gespeichert werden, welchen seinen eigenen Beiträge er bearbeiten oder löschen darf.
Und da ja die Rollen rekursiv geladen werden, also die Rechte von Unterrollen der jeweiligen Rolle mit einbezogen werden, würde sich für Benutzer der Rolle Administrator, oder Forummoderatoren eine gewaltige Datenmenge beim laden der Rolle ergeben.
Weil ja eben die Rechte aller Unterrollen mit einbezogen würden. Denn ein Moderator soll ja zum Beispiel auch alles bearbeiten oder löschen dürfen. Daher braucht er die Rechte der schreibenden Benutzer auch.
Und da ist jetzt meine Frage, ob es dann wirklich Sinn macht alle Rechte des Administrators zum Beispiel in ein Array zu speichern. Der Administrator wäre in diesem Fall also die größte 'Vaterrolle'. Alle anderen würden dieser Rolle unterstehen und es würde sich eine hierarchische Struktur in der Datenbank bilden.
Vielleicht gibt es aber auch grundlegende andere Kritik an dieser Vorgehensweise allgemein. Da bin ich mir sogar ziemlich sicher .
Das solltet ihr am Besten in einen Texteditor kopieren...dann ist das besser lesbar...
Edit: habe gerade gesehen, dass ich mich im Titel vertippt habe...könnte das evtl. jemand ändern?
mich würde interessieren, ob ich in folgender Überlegung Funktionsberechtigungen, Rollen und die Vererbung von Rollen designtechnisch gut umgesetzt habe.
Für mein CMS benutze ich Funktionsberechtigungen. An einem Punkt im System wird abgefragt, ob eine Funktion mit dem angegebenen Parameter überhaupt ausgeführt werden darf.
Diese Funktionalität ist Grundlegend und gilt somit für fast alle Funktionen im System, die über eine bestimmte Methode aufgerufen werden. Also auch für alle Extensions von Dritten.
Zum Beispiel: Darf ich die Funktion artikelBearbeiten() mit dem Parameter 4 ausführen? Also den Artikel mit der ID 4 bearbeiten?
Ich habe hier zunächst einmal mein Datenbankmodell beschrieben. Ich denke daran lässt sich das alles am einfachsten veranschaulichen.
Grundlegend verfügt jeder User über eine einzige Rolle (siehe Tabelle USERS). Diese bündelt Rechte. Des Weitern können Rechte Benutzern auch direkt zugeteilt werden.
Das ist sinnvoll, wenn es zum Beispiel darum geht einen eigenen Beitrag zu bearbeiten oder zu löschen. Die Zuteilung der Rechte an User oder an Rollen geschieht in der Tabelle RIGHT_BIND.
Wobei ich mir noch unsicher bin ist die Art und Weise wie Rollen bei mir Teile einer anderen Rolle werden können. (Ist Vererbung hier das richtige Wort?)Ich habe das in der Datenbank mit roll_parent beschrieben. Siehe Tabelle ROLLS.
Und eine andere Frage, die mich dahingehend beschäftigt ist das Ausmaß an Datenmengen, die meine Tabelle RIGHT_BIND annehmen würde. So würde zum Beispiel dort für jeden User gespeichert werden, welchen seinen eigenen Beiträge er bearbeiten oder löschen darf.
Und da ja die Rollen rekursiv geladen werden, also die Rechte von Unterrollen der jeweiligen Rolle mit einbezogen werden, würde sich für Benutzer der Rolle Administrator, oder Forummoderatoren eine gewaltige Datenmenge beim laden der Rolle ergeben.
Weil ja eben die Rechte aller Unterrollen mit einbezogen würden. Denn ein Moderator soll ja zum Beispiel auch alles bearbeiten oder löschen dürfen. Daher braucht er die Rechte der schreibenden Benutzer auch.
Und da ist jetzt meine Frage, ob es dann wirklich Sinn macht alle Rechte des Administrators zum Beispiel in ein Array zu speichern. Der Administrator wäre in diesem Fall also die größte 'Vaterrolle'. Alle anderen würden dieser Rolle unterstehen und es würde sich eine hierarchische Struktur in der Datenbank bilden.
Vielleicht gibt es aber auch grundlegende andere Kritik an dieser Vorgehensweise allgemein. Da bin ich mir sogar ziemlich sicher .
Code:
Tabelle: USERS -> speichert alle benutzer user_id user_nick user_mail user_pw user_roll 1 admin admin@admin.com md5 1 //unser administrator mit der administrator rolle 2 nickname mail@mail.com md5 2 //ein redakteur Tabelle: Rolls -> speichert alle rollen roll_id roll_name roll_description roll_parent 1 Administrator bliblatext //die Administrator Rolle 2 Redakteur bliblatext 1 3 Moderationsbereich1 bliblatext 5 //diese rolle ist teil von rolle 5 4 Moderationsbereich2 bliblatext 5 //diese rolle ist teil von rolle 5 5 SuperModerator bliblatext 1 6 Entwicklerrolle1 bliblatext 1 7 Entwicklerrolle2 bliblatext 1 TABELLE: RIGHTS -> speichert alle funktionen, deren Ausführung geprüft werden muss right_id right_function 1 drawPage //php funktion zum laden einer seite 2 editFile //php funktion zum bearbeiten einer datei 3 editPost //php funktion zum bearbeiten eines beitrags 4 editArticle //php funktion zum bearbeiten eines artikels TABELLE: RIGHT_BIND right_user right_roll right_id right_reference 1 1 4 //ich darf die funktion drawPage mit dem parameter (4) aufrufen 1 4 1 //ich darf die funktion editArticle mit dem parameter (1) aufrufen 1 4 2 //ich darf die funktion editArticle mit dem parameter (2) aufrufen 1 4 3 //ich darf die funktion editArticle mit dem parameter (3) aufrufen 1 4 4 //ich darf die funktion editArticle mit dem parameter (4) aufrufen 1 4 5 //ich darf die funktion editArticle mit dem parameter (5) aufrufen 1 4 6 //ich darf die funktion editArticle mit dem parameter (6) aufrufen 1 2 1 //ich darf die funktion editFile mit dem parameter (1) aufrufen 1 3 1 //ich darf die funktion editPost mit dem parameter (1) aufrufen 1 3 2 //ich darf die funktion editPost mit dem parameter (2) aufrufen 1 3 3 //ich darf die funktion editPost mit dem parameter (3) aufrufen 1 3 4 //ich darf die funktion editPost mit dem parameter (4) aufrufen 1 3 5 //ich darf die funktion editPost mit dem parameter (5) aufrufen 1 3 6 //ich darf die funktion editPost mit dem parameter (6) aufrufen
Edit: habe gerade gesehen, dass ich mich im Titel vertippt habe...könnte das evtl. jemand ändern?
Kommentar