Mailinglisten-Archive |
Hi Steffen, die Beantwortung Deiner Frage ist nur aufgrund der Sichtung des von Dir mitgeschickten, umfangreichen Codes etwas schwierig, wenn einem nicht sofort eine Ungereimtheit auffaellt... :-) Steffen Kother schrieb: > 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 */ $Modul enthaelt hier aber noch den richtigen Wert? > $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. D.h. es geht eigentlich nicht darum, dass $Funk leer bleibt, sondern $Value bzw. dass $Value an dieser Stelle einen falschen Wert enthaelt. > K=F7nnte dies mit dem _ (Unterstrich) zu tun haben? Komme nciht weiter, > macht mich m=A8rbe dieses Problem. Meinst Du den im Funktionsnamen? Der sollte nichts machen, zumal wenn PHP in die Funktion rein geht. :-) > function Pruefe_Funktion($Funktion, $Modul) { $Modul wurde korrekt uebergeben (s.o.)? > $Rechte = unserialize($_SESSION['cl_Rechte']); Hast Du Dir den Inhalt von $Rechte nach dieser Operation an dieser Stelle ausgeben lassen (z.B. print_r($Rechte))? Ist hier noch alles ok? > /* Kontrolle, wenn Modul gegeben ist */ > if (!empty($Rechte[$Modul])) { > foreach($Rechte[$Modul] as $Value) { Hast Du Dir hier den Inhalt von $Rechte[$Modul] ausgeben lassen? Stimmt der Wert? > 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) { Hast Du Dir hier den Inhalt von $Rechte['all'] ausgeben lassen? Stimmt der Wert? > if ($Value == strtolower($Funktion) || $Value == "all") > $Funk = $Funktion; > } > } > } > > if (empty($Funk)) $Funk = 0; > return $Funk; > } Also mein Ansatzpunkt waere, dass $Rechte[$Modul] nicht richtig vorhanden ist. Das koennte bedeuten, dass es in der folgenden Zeile ein Problem gibt, wo Du $Rechte aus der Session fuellst: $Rechte = unserialize($_SESSION['cl_Rechte']); Ist aber nur Spekulation. :-) Verfolge einmal zurueck, ab wo falsche Werte auftreten. Viele Gruesse Lutz
php::bar PHP Wiki - Listenarchive