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