Willkommen in der Webstatt
User-1 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 - xyz-169

netcup.de Warum gibt es hier Werbung?
User-2 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.

User-1 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?

User-3 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.

User-1 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?

User-1 am 20.04.06 08:42

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

danke euch

User-4 am 20.04.06 10:04

Wenn ich xyz-145s Post richtig interpretiere, hat er den xyz-19utzergruppen 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 xyz-19utzer Gruppen zuzuordnen und den Gruppen Rechten und dann bei einer Aktion abzufragen ob der User in einer Gruppe mit diesem Recht ist.

User-1 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?

User-5 am 20.04.06 13:09

Du kannst sie ja auch includen. xyz-48n bleibt das Ganze etwas übersichtlicher ;)

User-4 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.

xyz-141el

User-1 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.

User-3 am 20.04.06 14:25

Lass dir doch mal beide Werte ausgeben.

User-6 am 20.04.06 14:36

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

User-1 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.

User-5 am 20.04.06 15:04

Wird denn die Konstante vor der Abfrage definiert?

User-3 am 20.04.06 15:19

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

User-1 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?

User-6 am 20.04.06 17:43

Quote
Original von xyz-169
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
?>

User-1 am 20.04.06 19:29

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

User-7 am 20.04.06 19:52

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

User-1 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