Eintritt in manche areas nur für bestimmte reg. besucher zulassen

Morph

Erfahrenes Mitglied
Ich erklär das jetzt erst einmal.
Hab' nen kleinen login geschrieben mit session id
PHP:
<?php
session_start ();

// prüfen, ob user und datei existieren
if (file_exists("./member_dateien/$username")) {
	$user_dat = fopen("./member_dateien/$username", "r");
	$user_dat_inhalt = file("./member_dateien/$username");
	fclose ($user_dat);

	// passwörter vergleichen
	if ($user_dat_inhalt[1] == $pw) {

		// username & passwort waren richtig
		$userdaten = true;
		// variable für session erstellen (user einloggen)
		$user_eingeloggt = true;

	} else {
		$userdaten = false;
		$user_eingeloggt = false;
		echo "passwort falsch";
	}

} else {
	echo "user existiert nicht";
	$userdaten = false;
	$user_eingeloggt = false;
}

// variable $user_eingeloggt in der session registrieren
session_register ("user_eingeloggt");
?>
Soweit passt ja alles, nur wie bekomme ich es hin, dass z.B. ein der eine user nur in die area 1 reinkann, während der andere alles machen kann (z.b. news posten und der erste nur seine benutzerdaten und nicht auch die von anderen ändern kann).
Ich hab da im mom keine Idee :(

Bitte helft mir :(

Edit: Noch ein Beispiel - user a darf sein profil ändern, aber nicht das von user b, da dazu user lvl 3 nötig wäre, er aber nur 2 ist. mit 4 dürfte er z.b. auch news posten

Könnte ich das z.b. in ner text datei bei der anmeldung speichern (standart user lvl 1), das wird dann vom admin entsprechend geändert und die variable $inhalt[x] wird dann zur globalen var gemacht und auf jede seite, ohne sie per ?user_lvl=$inhalt[x] aufrufen zu müssen weitergegeben ?

Grüße, Morph
 
Zuletzt bearbeitet:
An deiner Stelle würd ich eine Datei anlegen, die alle Accounts und ihre Rechte gespeichert hat.

z.B. so

Nickname Access
Nickname Access
Nickname Access
Nickname Access

Bei Access würd ich ein Bit-Wert nehmen. z.B. wie folgt
1 -> darf seine eignen einstellungen bearbeiten
2 -> darf neue mitglieder anlegen
4 -> darf fremde mitglieder details bearbeiten
8 -> Administrator

Dann zählst Du alle Bit-Werte zusammen .. in deinem Fall als Administrator also 1+2+4+8 = 15. Die 15 speicherst Du dann bei Deinem Nick unter Access ...

Wenn sich ein User einloggst holst dir den Wert ... und schaust, ob er die entsprechenden Rechte hat.

z.B. so

if($user_access & 1) { darf seine eignen einstellungen bearbeiten }
if($user_access & 2) { darf neue mitglieder anlegen }
if($user_access & 4) { darf mitglieder details bearbeiten }
etc...

ich hoffe ich hab es verständlich erklärt.
Rob
 
Eigentlich ist schon fast alles gesagt. Aber möchte noch was zu der Sache mit dem Profilediting sagen.
Das kannst du überprüfen in dem du folgendes abfragst
PHP:
if ($user_level == 3 || $owner == $logged_user)
{
  //Profil darf geändert werden
}
else
{
  // Profil Editing nicht erlaubt
}

Hoffe das hilft

So Long
TheVirus
 
Ahso die idee mit dem addieren ist gut - Danke an euch :)

Werds heut nachmittag ma zu hause ausprobiern

Grüße, Morph
 
Hab mir das mit dem user access nochmal genau durch den kopf gehen lassen - die idee ist schon ziemlich gut, nur wie gebe ich die variable, in der die bits addiert wurden, weiter ? weil muss ja was zum vergleichen haben ( if($user_access == 2) ... if($user_access == 15) ...)

Die evtl zu globalen variable deklarieren ? Per ...&user_access=$blub weiterzugeben ist ja schwachsinn, dann bräucht ich ja garkein access check ;)
Danke im vorraus

Grüße, Morph
 
mm ... ich würde die variable bei jedem seitenaufruf neu auslesen aus der File.

bzw - du machst einen Fehler.

Du darfst nicht schreiben if($user_access == 15) ... genau deshalb gibt es ja Bit-Operatoren ... sondern z.B. if($user_access & 2) ..

Ich erklär es nochmal :)
2 hoch 0 = 1 -> darf seine eignen einstellungen bearbeiten
2 hoch 1 = 2 -> darf neue mitglieder anlegen
2 hoch 3 = 4 -> darf fremde mitglieder details bearbeiten
2 hoch 4 = 8 -> Administrator
etc

Wichtig ist, du immer den letzten Wert mal 2 nimmst !!!!! der nächste punkt wäre z.B. 16 .. dann 32

Un nun zählst du die werte zusammen ... wenn jemand z.b. nur die Details fremder bearbeiten darf und neue accounts erstellen darf, rechnest du wie folgt.

2 + 4 = 6

6 speicherst du unter Access

und nun darfst du NICHT if($user_access == 6 ) schreiben, sondern
if($user_access & 2) -> true
if($user_access & 4) -> true
alle anderen access if anweisungen sind dann false.

so .. wenn du noch fragen hast, frag :)
Rob
 
Erstmal danke für die erklärung zu den bit operatoren ... kannte ich noch garnicht :)

Jo hab noch fragen - bin ja auch ein schwerer fall *g*
Also: wenn ich des auf jeder seite, die sonen check braucht, auslesen soll, woher soll ich denn dann den user kennen, der die seite aufruft und dementsprechend weis ich auch garnicht, welchen user mit welchen rechten ich auslesen soll - ich frag ja immer ob eine session true oder false ist um dem user eintritt zu gewähren
Und da ist das problem - wie soll ich denn, wenn ich nur ne session aufrufe und prüfe ob true oder false dann noch herausfinden, welcher user die seite dann aufruft ?
weil die seitenaufrufe sind bei mir so -> blub.php?go=clan_login_form.php -> ...?go=clan_login.php [wenn userdaten richtig dann gehts per weiterleitung weiter] -> ...?go=clan_intern.php&[hier sind dann die sess daten dran] [mit "session abfrage"] -> z.b. ...?go=member_edit.php[session daten]

Grüße, Morph
 
mm ... ganz einfach. gib jedem User eine ID .. kannst auch den Nick nehmen wenn du willst ... und diese ID (nick) speicherst du in deiner session ab

session_register (user_id);

easy :)
 
Zurück