5 Stimmen

Wie strukturiert man Benutzerrechte für ein CMS?

Ich erstelle ein benutzerdefiniertes Fotografie-CMS-System und muss ein Benutzerauthentifizierungs- und Berechtigungssystem implementieren. Was sind die üblichen Praktiken in der Branche zu gehen über die Erstellung solcher Schema.

Im Grunde muss ich Benutzer haben, und Benutzer können von unterschiedlichem Typ sein. Einige Benutzer können, sagen wir, nur Galerien erstellen, andere können sie nur bearbeiten, oder nur bestimmte Galerien bearbeiten, usw. Wie sollte das strukturiert werden? Ich verwende eine MySQL-Datenbank und ich verwende PHP, um das CMS zu programmieren.

Ich habe versucht, bei Google zu suchen, habe aber nur Artikel gefunden, die erklären, wie man Benutzer für die eigentliche MySQL-Datenbank anlegt. Ich wäre dankbar für einen Link zu einem Artikel, in dem erklärt wird, wie diese Art von Dingen zu tun ist.

Ich danke Ihnen im Voraus.

6voto

sarnold Punkte 99402

Es gibt zwei gängige Ansätze für dieses Problem, bei denen es darum geht, die zulässigen Operationen in etwas Diskretes zu zerlegen, das man benennen kann. (Beiträge löschen, Galerien erstellen, den Code aktualisieren, die Datenbank entladen, die Raketen starten, das Garagentor öffnen). Geben Sie jeder dieser Operationen eine Bitmap in einem Bitvektor (wenn Sie vorhaben, weniger als 32 Berechtigungen zu haben, ist dies ein netter und kompakter Speichermechanismus; wenn Sie denken, dass es über 32 Berechtigungen hinausgeht, die Größe einer typischen Ganzzahl, dann vielleicht eine Tabelle in Ihrer Datenbank )

Sie können also entweder die Benutzer direkt den Berechtigungen zuordnen ("Ich möchte die gallery_create à sarnold ") oder Sie können Benutzer und Berechtigungen über Benutzerklassen zuordnen ("Ich möchte gallery_create an alle Mitglieder der art_curator Klasse; dann möchte ich den Benutzer sarnold de docent à art_curator ").

Wenn Sie die Benutzer direkt den Berechtigungen zuordnen, kann es sein, dass Sie Jahre später bei der Bereitstellung ein Sammelsurium an seltsamen Berechtigungen vorfinden. Wenn Sie Benutzer zu Klassen zuordnen, kann es sein, dass Sie künstliche Benutzerklassen haben, weil Sie einer bestimmten Person eine Berechtigung zugestanden haben, anderen aber nicht.

Wie diese Zuordnung am besten zu bewerkstelligen ist, ist noch ein offenes Problem; ich habe über verschiedene Arten von Genehmigungsmodellen geschrieben Modellierung eines Berechtigungssystems Das können zu viele oder zu wenige Informationen sein, je nachdem, wie kompliziert Sie Ihr System gestalten möchten.

Wenn Sie Berechtigungen nur in Bitmaps speichern möchten (z. B. die Implementierung des Linux-Kernels von CAPABLE() para CAP_SYS_ADMIN , CAP_DAC_OVERRIDE usw.), dann können Sie mit etwas sehr Einfachem neue Privilegien hinzufügen:

if (requested_new_permission == "CAP_SYS_ADMIN")
  user->permissions |= CAP_SYS_ADMIN;
else if (requested_new_permissions == "CAP_DAC_OVERRIDE")
  user->permissions |= CAP_DAC_OVERRIDE;

...

Wenn Sie dann die Fähigkeiten testen müssen:

if (CAPABLE(user, CAP_SYS_ADMIN))
  reboot_server();

und das Makro CAPABLE() aussehen kann:

define CAPABLE(user,cap) ((user)->Berechtigungen & (cap))

(Verzeihen Sie das C, ich kenne mich mit php einfach nicht gut aus; ich war gezwungen, viel zu viele php-Fehler zu beheben, als dass ich es selbst lernen wollte).

Wenn Sie Benutzer über Benutzerklassen den Berechtigungen zuordnen wollen, dann könnten es drei Tabellen sein: eine users Tabelle, eine groups o classes Tabelle, und eine permissions Tisch. classes hat Spalten für user_id y permission_id . Wenn Sie prüfen müssen, ob eine Berechtigung erteilt werden kann, wählen Sie die Klasse des Benutzers und dann die Berechtigung in der Klasse aus. (Es ist auch schon Jahre her, dass ich SQL von Hand geschrieben habe; ich bin sicher, dass eine einzelne Abfrage eine Ja- oder Nein-Antwort liefern kann, aber ich bin mir nicht sicher, ob es eine Verknüpfung mehrerer Tabellen oder die Verwendung von Unterabfragen wäre oder ob es einfach einfacher wäre, zwei Abfragen an die Datenbank zu stellen :)

Ich hoffe, das hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X