Mailinglisten-Archive |
Moin, irgendwie seh ich's nicht. Wenn sich meine/ich Testuser anmelden, werden die Daten dazu in eine Session [1] geschrieben. Will er dann auf ein Modul oder eine Funktion zugreifen, werden die entsprechenden Daten [2] ausgelesen und mit den ben=F7tigten Berechtigungen abgeglichen [3]. Das Problem besteht nun darin, dass trotz gegebener Berechtigung das Skript in die Verweigerung abzweigt. Die Kontrolle sieht so aus: $Modul = Pruefe_Modul('fibu'); /* ^ Liefert bei true 'fibu', sonst 0 */ $Funktion = Pruefe_Funktion('zudd_erfassen', $Modul); /* ^ Liefert bei true die Funktion sonst 0 */ Der User hat in seiner Session die Berechtigung f=A8r 'zudd_erfasen', aber irgendwie will er den Vergleich von $Value mit strtolower($Funktion) nicht, denn $Funk bleibt leer. Schreibe ich vor den Vergleich $Value='zudd_erfassen' hart rein, dann gehts. K=F7nnte dies mit dem _ (Unterstrich) zu tun haben? Komme nciht weiter, macht mich m=A8rbe dieses Problem. Bitte schaut mal dr=A8ber, und probierts notfalls selber. Kritiken zu den Kontrollfunktionen nehme ich auch gern entgegen. Danke. -- Mit freundlichen Gr=A8=ADen / Kind regards Steffen Kother [1] - Schreiben in $_SESSION['cl_Rechte'] - /* * vorher werden alle m=F7glichen Rechte f=A8r den User ermittelt * und die Abfrage zu Modulen und Funktionen erledigt */ if (!empty($SELECT)) { /* Die Module und Funktionen auslesen */ $ERG = mysql_fetch_assoc($SELECT) or $ERG = ''; $Modul = $ERG['bezeichnung_modul']; $Funktion = $ERG['bezeichnung_funktion']; /* Je Modul ein Array (Modul => Funktion) */ if (empty($DAT[$Modul])) $DAT[$Modul] = array(); array_push($DAT[$Modul], $Funktion); } /* ... */ $_SESSION['cl_Rechte'] = serialize($DAT); [2] - Inhalt von $_SESSION['cl_Rechte'] und $Rechte - $_SESSION['cl_Rechte']: a:1:{s:4:"fibu";a:2:{i:0;s:4:"zudd";i:1;s:14:"zudd_erfasssen";}} $Rechte: Array ( [fibu] => Array ( [0] => zudd [1] => zudd_erfasssen ) ) [3] - Abgleichen der Berechtigungen - /* * Funktion zum Pr=A8fen des Modul */ function Pruefe_Modul($Modul) { $Res = 0; $Rechte = unserialize($_SESSION['cl_Rechte']); foreach (array_keys($Rechte) as $Key) { if ($Key == $Modul && !empty($Rechte[$Modul])) $Res = $Modul; else if (!empty($Rechte['all'])) $Res = 'all'; } return $Res; } /* * Funktion zum Pr=A8fen der Funktion */ function Pruefe_Funktion($Funktion, $Modul) { $Rechte = unserialize($_SESSION['cl_Rechte']); /* Kontrolle, wenn Modul gegeben ist */ if (!empty($Rechte[$Modul])) { foreach($Rechte[$Modul] as $Value) { if ($Value == strtolower($Funktion) || $Value == "all") $Funk = $Funktion; } } /* Kontrolle, wenn kein Modul vorhanden ist, bsp. ROOT-User */ if (empty($Rechte[$Modul])) { if (!empty($Rechte['all'])) { foreach($Rechte['all'] as $Value) { if ($Value == strtolower($Funktion) || $Value == "all") $Funk = $Funktion; } } } if (empty($Funk)) $Funk = 0; return $Funk; }
php::bar PHP Wiki - Listenarchive