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