PHP5: Best Practices Benutzerverwaltung?

deostift

Erfahrenes Mitglied
Hallo zusammen,

kennt jemand ein "best practice" zum Thema komplexe Benutzerverwaltung? Also z.B. mehrstufiges Benutzer-Ebenen auf der einen Seite und Module mit individuellen Rechten auf der anderen.

Ich kenne die einen oder anderen Kochbüchern, allerdings beziehen die sich oft auf ein sehr kleines Problem - leider weniger mit Bezug auf Herangehensweisen bei größeren Projekten.

Danke!
 
Hab es bisher immer so gelöst:
PHP:
function checkrights($level, $userlevel) {
	for ($i=15; $i>=0; $i--) {
		$binaer = pow(2, $i);
		if ($binaer <= $userlevel) {
			$userlevel = $userlevel - $binaer;
			$rechte[] = $binaer;
		}
	}
	if (@in_array($level, $rechte)) {
		return true;
	} else {
		return false;
	}
}
if(!checkrights(8,9)) {
	echo "Nicht genügend Rechte";
	exit;
}

Damit vergibst du so rechte:
1 -> News Schreiben
2 -> News Löschen
4 -> News Editieren
8 -> Gästebucheintrag löschen
16 -> ....
also immer mal 2. Wenn du jetzt einen User hast dann rechnest du alles zusammen. z.B.

Der User soll News Schreiben und Gästebucheinträge löschen also:
1+8=9
so hat der User das Recht 9.

Wenn du jetzt testen willst ob der User News editiren darf rufst du folgende Funktion auf:
PHP:
checkrights(4,9)
Die Gibt dann false oder true zurück.
 
Hey,
Aber kann das dann net sein, dass werte doppelt vorkommen können => Der Benutzer Rechte hat, die er eigentlich gar nicht haben sollte?

bsp:
Recht 2: News verfassen
Recht 6: Gästebuch editieren
Recht 8: Forum schreiben
Recht 16: Forum-Mod
Recht 32: Super Admin

Rechte des User 1: 2+6+8+16 = 32
Rechte des User 2: 32

Haben beide 32, sind also beide ein Super Admin, aufwohl der eine nur die andern Rechte haben soll.

Vlt isses aber auch n geniales System, und ich bin nur zu müde =D
 
du arbeitest auch mit 1,2,4,8,16,32 und nicht mit 1,2,6,8,16

User1: 1+2+4+8+16 = 31
User2: 32 = 32

So kann es nicht vorkommen, dass User mit verschiedenen Rechten nachher die gleichen Rechte hat.
 
Ich arbeite momentan an einer Klasse, die genau auf diesem Rechtesystem (ähnlich dem von UNIX) aufbaut. Daher verweise ich auf den entsprechenden Thread, wo man sehr viele , wie ich finde, interessante Ansätze und Erklärungen zu diesem Thema fndet.
MfG, Andy
 
Ok, dann wars doch schon zu spät =D

Aber mirs noch was aufgefallen, wenn man ca 20 verschiedene Rechte Vergeben muss, dann kommt ja auf richtig hohe zahlen, dass ja auch nicht gerade praktisch, oder?
 
Zuletzt bearbeitet:
Hey,
Ich will kein extra Thema aufmachen, aber mir is noch n gedanke gekommn =)

Wenn man jetzt z.B. ne 'user' Tabelle hat, mit 'userID', 'email', 'name', 'passwort' oder so in etwa.

Wie wäre es dann, ne weiter Spalte zu erstellen mit 'rechte', in der dann man die Rechte in folgender Form speichert:

1,3,6,8,9,130,429
oder
1/3/6/8/9/139/429
oder
1-3-5-8-9-139-429

Aufjedenfall halt die Einzelnen Rechte mit mit einem beliebigen zeichen getrennt, und dann beispielsweise mit 'explode' und 'in_array' prüfen ob ein user die benötigten Rechte hat.

Dazu könnt man noch ne Tabelle mit den dazugehörigen Rechten mahcne, und den Namen etc.


Was haltet ihr davon?
 
Mhh ne, da ist die andere Methode schon effektiver, da du nur eine Zahl schreibst und nicht viele und diese aufteilen musst.

Wenn du viele Rechte brauchst, dann kannste das ganze auch binär machen z.B. 11111111 = 127 also ich finde nicht das die zahlen dann zu hoch werden, dass kann man eigentlich ganz gut aufschreiben usw.
 
Zurück