phpbar.de logo

Mailinglisten-Archive

[php] Vergleich von zwei Werten

[php] Vergleich von zwei Werten

Steffen Kother steffen.kother at gmx.net
Mit Sep 29 10:02:06 CEST 2004


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