Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 19.11.2007, 18:26
braindead braindead ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard Rechteverwaltung mit MySQL und PHP

Hi,
ich stehe vor einer für ein Webprojekt wichtigen Entscheidung und will deshalb mal Fragen was Andere so davon halten:
Es geht um folgendes, ich will für eine Webseite (bei der es sich allgemein Gesagt um eine Multiuserdatenbankverwaltung handelt) die passende (also effektivste) Form einer Rechteverwaltung (bzw. Speicherung) finden.
Etwas Konkreter, auf der Webseite sollen sich verschiedene Nutzer anmelden und je nach ihren Rechten, bestimmte Bereiche ändern, neue hinzufügen, betreten oder nicht betreten können usw. Im Großen und Ganzen kommen erstmal mindestens so um die 20 verschiedene Rechte zusammen (wobei es sich aber noch nicht um das Ende handeln muss). Mein Problem ist nun wie ich die Benutzerspezifischen Rechte (es gibt zwar ein paar Gruppen dennoch soll es möglich bleiben die Rechte individuell einzustellen) am besten mit den Benutzern verknüpfe.
Zur Verfügung steht mir natürlich eine MySQL Datenbank und daraus ergeben sich mir auf den ersten "Blick" 3 Möglichkeiten:
1. Ich lege neben der Benutzer Tabelle eine zusätzliche Tabelle an mit folgender Strucktur:
USER_ID, RECHT1, RECHT2, usw...
wobei dann quasi jeden Nutzer EIN Datensatz in der Tabelle zugewiesen wird der die Rechte dann als Binäre Flags speichert.

2. Ich lege wieder eine zusätzliche Tabelle an die die Rechte aber in folgender Form speichert:
USER_ID RECHT_ID RECHT_WERT

Der Unterschied ist klar, auf diese Weise muss ich die Tabelle nicht jedesmal um eine Spalte erweitern um ein neues Recht hinzuzufügen. Nur das Auslesen der Rechte wird etwas auswändiger da ich so für jedes Recht jeweils eine Zeile Ausgraben muss d.h. ich muss erstmal alle Zeilen finde mit der Passenden User-ID.

3. Die letzte Möglichkeit die mir einfällt ist die das ich die konkreten Nutzereinstellungen nicht über Tabellen Speichere sondern über eine einzige Zahl die dann direkt in die User-Tabelle gespeichert werden kann die schon alle anderen Benutzer Daten wie Name,Passwort usw. enthällt.

Bei der RechteID vergabe achte ich darauf das die Ids entsprechend gewählt sind das ich die Rechteeinstellungen ähnlich der UNIX Dateirechte als einzelne Zahl erhalte wenn ich sie aufsummiere.
Der Nachteil ist nur der das ich sowohl beim Speichern als auch beim Lesen der Nutzerrechte diese Zahl ersteinmal durch einen kleinen Algorytmus zerlegen muss. Und naja, das neuimplementieren zusätzlicher Rechte ist ebenfalls nicht weiter schwer ich muss nur darauf achten das ich die höhere ID dann in den Algoritmen berücksichtige.


Was würdet ihr mir Raten, die erste Möglichkeit scheint mir die Effektivste zu sein, nur sollte ich vorher genau wissen welche Rechte ich vergeben will um nicht später umständlich Spalten an die Tabelle anfügen zu müssen, außerdem kann ich mir vorstellen das ich die Tabellen nicht mit hunderten von Spalten aufbauen kann/sollte (selbst wenn es mit sicherheit keine 100 Rechte werden)

Die zweite Möglichkeit wäre die Eleganteste aus meiner sicht, und wenn wir alle Quantencomputer benutzen würden (insbesonder die Server) dann würde ich diese auch benutzen, nur ist es mir gerade bei der Benutzerverwaltung wichtig das es wenn möglich keit unnötigen Performance Lücken gibt.

Geändert von braindead (19.11.2007 um 18:31 Uhr)
Mit Zitat antworten
Sponsored Links