Rechteverwaltung im Admin Bereich

_voodoo

Erfahrenes Mitglied
HiHo :)

Also wie im Betreff zu lesen versuche ich ein Rechteverwaltungsssystem zu coden für mein Clan-CMS.
Ich stell mir vordass der ADmin bzw. jmd mit Adminrechten für jedes Member individuel festlegen kann was der betreffende Member machen darf. Z.B.: nur Clanwars löschen und sein Profil editieren (als krasses Beispiel).

Also wie realisiere ich das ? Hatte schon die Idee für jede Adminmöglichkeit eine mysql Spalte zu machen aber das ist nicht ganz elegant und mit Sicherheit ein großer Performancefresser :)

Ich bedanke mich für hilfreiche Beiträge, auf Wiedersehen :D
 
du kannst in einer spalte alle möglichen Rechte einfach in der Form abspeichern, dass PE|CL meinetwegen die Rechte ProfilEditieren und ClanwarLöchen darstellt. Nachher kannste bei jedem seitenaufruf diesen string mit explode aufsplitten und dann überprüfen ob das benötigte Recht dabei ist.

gibt betimmt noch andere möglichkeiten, aber so mach ichs und das funzt wunderbar ;)
 
inspirationen :) leg ne tabelle in mysql an mit den rechten


zb

id|news_poster|news_editieren|news_löschen
1|0|0|0
2|1|1|0


etc

dann schriebste dir ne simple function die überprüft ob die gegebene sparte auch mit 1 also ja gesetzt ist wenn nicht kein zugang

die function könnte so aussehen
PHP:
<?
function check_rights($feld,$id)
{
  $db=mysql_query("
    SELECT
    `id`,
    `$feld`,
  ... etc
  /*
  dann einfach n fetch und wenn 1 true zurückgeben etc
  */
?>

hope it helps
 
Hatte schon die Idee für jede Adminmöglichkeit eine mysql Spalte zu machen aber das ist nicht ganz elegant und mit Sicherheit ein großer Performancefresser

hab ich oder du das falsch verstanden ? :rolleyes:
wo ist der unterschied zwsichen spalten in der mitgliedertabelle und ner ganz eigenen Tabelle wo doch für jedes recht ne spalte ist ?

mit explode aufsplitten in einen array und dann if(in_array(..)) $this_site_allowed = 1; oder so. kenn mich net genau aus mit MySQL und Performance ;) aber ich denke, dass ein feld abzufragen und aufzusplitten, wobei in dem nur berechtigte Seiten aufgeführt werden, weniger brauchen müsste, als wenn man tig spalten ausliest und dann zig variablen hat mit 1 oder 0 ;) naja, kann mich aj auch irren ;-)
 
Die eleganteste Methode ist es, jedem User einen Rechte Key zuzuweisen. Dieser Setzt sich aus der Summe von beliebig vielen Quadratzahlen zusammen.
Bsp:
1 = News hinzufügen
4 = News löschen
9 = Members adden/löschen
16 = Links adden/löschen
25 = Clanwars adden/löschen

Durch Addition der verschiedenen Zahlen erhält man einen Rechte-Key, der nur in einer möglichen Kombination zusammenhängen kann. Sprich wenn jemand das Recht haben soll, News hinzuzufügen, Links zu adden und zu löschen, sowie CW's zu adden und zu löschen bekommt er den Rechte Key 42 (1+16+25). Ein Rechte Key kann immer nur auf eine mögliche Kombination von Einzelrechten zurückzuführen sein. Dafür sorgen die Quadratzahlen. Dies ist das gängige Prinzip. Das einzige, was ich nicht weiss ist, wie sowas im Normalfall wieder zurück aufgeschlüsselst wird.
 
Die Version von leuchte ist die beste. Ist nur nicht immer leicht zu verstehen wenn man sich nicht jeden Tag damit beschäftigt.

Ein Tip
Such mal bei Google nach "chmod". Ist vom System her genau das gleiche.
 
-

Das Prinzip basiert auf einer sogenannten BitMaske.
1 Byte besteht aus 8Bit und kann eine Wert bis zu 255 aufnehmen.
Sämtliche Zahlen zwischen 0 und 255 werden nun durch die einzelnen Bits dargestellt (= Binärsystem).
1 = 0000 0001
2 = 0000 0010
3 = 0000 0011
.
.
.
Wenn wir dies nun auf die Rechtverteilung beziehen, steht die 1 für News hinzufügen
1 = 0000 0001 = News hinzufügen
2 = 0000 0010 = News löschen
4 = 0000 0100 = Members hinzufügen
usw.
Wir können nun also für jedes Bit ein Recht verteilen.
Wenn wir später überprüfen wollen, ob ein User das nötige Recht für eine Aktion hat, benutzen wir die Bit Operatoren
Code:
if (UserRechteSumme AND 1) = 1 then
  Darf News hinzufügen

Der Vergleich intern sieht da folgenderweise so aus:
Code:
0000 0011 (UserRechteSumme) AND
0000 0001 ( 1 = News hinzufügen) =
0000 0001 ( ergibt 1)

Das Bit ist also gesetzt, die If-Anweisung ergibt true und der User darf News hinzufügen.
Bits setzen tut man mit dem Bit Operator OR, wieder löschen mit XOR ( exklusives Oder)
Weiteres einfach mal bei google suchen
P.s
Sowas eignet sich auch sehr schön dafür, wenn man viele Flags ( Bool'sche Variablen ) benötigt. Diese kann man in einer Variablen zusammenfassen.
 
Zuletzt bearbeitet:
Woraus auch folgt, dass ich mit meinen Quadratzahlen danebenlag, aber geht in die gleiche Richtung ;)
 
Zurück