Willkommen in der Webstatt Zum Webstatt Blog und Stories
phore phore am 19.04.06 09:19

moin.

wie macht ihr das bei grösseren seiten mit den sicherheitsabfragen - also wer was sehen darf und was nicht?
ich weiss nicht genau wie ich es am besten mache - ich habe 4 benutzergruppen die unterschiedliche session werte haben - bisher hab ich einfach in jeder datei die "intern" ist eine abfrage:

if ($_SESSION['group'] < 4) {
die('Keine Berechtigung!');
}


ich find das aber ziemlich mühsam - wenn ich nachträglich was an des sessions schraube muss ich in jeder datei nachkorrigieren.

hat mir jemand eine bessere möglichkeit?
danke - phore

netcup.de Warum gibt es hier Werbung?
bastey bastey am 19.04.06 09:58

Wenn du keine Datei hast, die du in alle Datein includest, wirst du um das ändern aller Datein nicht herum kommen.

phore phore am 19.04.06 10:03

mhm daran hab ich schon gedacht aber dann muss ich ja für jede berechtigungsstufe eine andere datei haben..geht das nur so?

milahu milahu am 19.04.06 10:18

Nööh. In deiner global.php definierst du je nach Sicherheitsstufe ein paar Konstanten:
<?php
switch ($_SESSION['group'])
{
case 3:
define('DARF_INS_ACP', true);
case 2:
define('DARF_MODERIEREN', true);
case 1:
define('DARF_POSTEN', true);
default:
define('DARF_AUFS_KLO', true);
}
?>

Anm: Das Durchfallen is Absicht. So darf auch der Admin aufs Klo.

phore phore am 19.04.06 10:23

gefällt mir schon besser :)
ich probiers mal aus - vielen dank schonmal!

/edit - die konstanten muss ich ja aber auch abfragen..wo ist der unterschied?

phore phore am 20.04.06 08:42

öhm - milahu hast du mein edit gelesen :)?
ich wäre froh wenn mir jemand weiterhelfen könnte.

danke euch

Michael Michael am 20.04.06 10:04

Wenn ich milahus Post richtig interpretiere, hat er den Benutzergruppen direkt Rechte zugeordnet, beispielsweise DARF_INS_ACP
Du müsstest dann wenn jemand ins ACP abfragen:
if (defined(DARF_INS_ACP)) {
// ACP
} else {
// access denied
}


Alternativ könntest du auch viermal den gleichen Konstantennamen verwenden mit je unterschiedlichen Zahlen werden, dann wären diese ordbar, beispielsweise
switch ($_SESSION['group'])
{
case 3:
define('USER_ACCESS_LEVEL', 3);
case 2:
define('USER_ACCESS_LEVEL', 2);
case 1:
define('USER_ACCESS_LEVEL', 1);
default:
define('USER_ACCESS_LEVEL', 0);
}
if(USER_ACCESS_LEVEL>=2) {
// ok
} else {
// access denied
}


Allerdings hätten dann übergeordnete Gruppen alle Rechte der Unteren, ich weiß nicht ob das gewollt ist. Sinnvoll wäre es sicher nicht.

Meiner Meinung nach die beste Möglichkeit ist, die Benutzer Gruppen zuzuordnen und den Gruppen Rechten und dann bei einer Aktion abzufragen ob der User in einer Gruppe mit diesem Recht ist.

phore phore am 20.04.06 13:02

danke.

aber dann muss ich ja trotzdem in jeder datei die zum acp gehört diese abfrage reinschreiben oder?

Thiemm Thiemm am 20.04.06 13:09

Du kannst sie ja auch includen. Dann bleibt das Ganze etwas übersichtlicher ;)

Michael Michael am 20.04.06 13:11

Ja natürlich.
Das halte ich aber nicht für übertrieben sondern eher für angebracht auf jeder geschützten Seite die Berechtigung zu prüfen. Vielleicht hast du alternativ eine Datei, die von allen Elementen des ACP benutzt wird, wenn ja könntest du dort die Prüfung integrieren. Hast du so eine Datei nicht, könntest du sie auch includen, das wäre dann aber "genau" das Gleiche (du könntest dort natürlich noch mehr machen und später leichter die Prüfung ändern) wie eine Rechteprüfung.

Michael

phore phore am 20.04.06 14:06

ah eben - dacht ichs doch :)
dann schreib ich wahrscheinlich in jede datei:

define('NEEDED_LEVEL', 4);

und in der global.php:

if ($_SESSION['group'] < NEEDED_LEVEL) {
header('Location: ?load=error');
}


ich denke das macht sinn?
danke für eure hilfe!

/edit.
das funzt nicht :( - auch mit genügend rechte komm ich zu der fehler seite.

milahu milahu am 20.04.06 14:25

Lass dir doch mal beide Werte ausgeben.

der_nic der_nic am 20.04.06 14:36

mach doch noch ein exit; unter dein header();

phore phore am 20.04.06 14:36

wenn ich in der global.php folgendes habe:

if ($_SESSION['group'] < NEEDED_LEVEL) {
echo NEEDED_LEVEL;
}


gibt es "NEEDED_LEVEL" aus - mein define() wird also gar nicht beachtet.
die global.php wird halt ganz oben in der index includet.

Thiemm Thiemm am 20.04.06 15:04

Wird denn die Konstante vor der Abfrage definiert?

milahu milahu am 20.04.06 15:19

define() is komisch. Versuch mal, den Konstanten-Namen ohne Hochkommas zu schreiben oder in doppelten Anführungszeichen.

phore phore am 20.04.06 15:29

nein das hilft leider auch nicht. die bedingung wird einfach vor der definierung von NEEDED_LEVEL geprüft. kann man das irgendwie umgehen?

der_nic der_nic am 20.04.06 17:43

Quote
Original von phore
die bedingung wird einfach vor der definierung von NEEDED_LEVEL geprüft.

:D lool... ist ja klar wenn dus nicht definiert hast wirds auch nid funktionieren...

probiers doch mal so:

<?php
$group = 1;
define('NEEDED_LEVEL', 6);
if ($group < NEEDED_LEVEL) {
//echo NEEDED_LEVEL;
header('Location: ?load=error'); // lädt zu deiner Error seite
exit; // verhindert dass deine Seite weiter geladen wird
}
// Rest von der Seite
?>

phore phore am 20.04.06 19:29

ich kann ja NEEDED_LEVEL nicht in der global.php definieren - das muss ja in der datei stehen.

Dustwolf Dustwolf am 20.04.06 19:52

Ja, in der Datei die Zuweisung machen und dann (!) erst die global.php da includen.

phore phore am 21.04.06 08:50

:tired:die global.php wird aber schon auf der index.php includet.
ich komme wohl nicht darum für jede geschützte datei eine seite zu includen..

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt