Hallo zusammen,
Zur Zeit brüte ich an einem Neuen System (woran ich schon länger brüte - gut Ding, will Weile haben...) und möchte dort, dass, sofern so programmiert, die if-Anweisungen (sei das nun für Ausgaben, Eingaben, SQL-Statements, ...) absolut dynamisch bleibt. Soll heissen, je nach Benutzerrechten des Users, soll z.B. Hinhalt X angezeigt/ausgeführt werden - oder eben nicht. Dazu hat dieses System eine (für meine Verhältnisse) grosse Rechte-Verwaltung und dementsprechend viele verschiedene Rechte. Hatte mir schon im Vorfeld einiges darüber durchgelesen (z.B. rbac, bit-flags, ..) aber die sind mir zum einen nicht immer geheuer und/oder zum anderen würde es vermutlich den Rahmen und die Übersichtlichkeit sprengen - grade bei den bit-flags *denk*.
Folgender Ablauf ist bisher angedacht (sämtlicher Code ist nur Gedankengut, also nichts getestetes, o.ä.):
1. Beim Seitenaufruf werden sämtliche Benutzerrechte dieser Seite aus einer MySQL-Datenbank geladen und in ein Array verfrachtet.
2. Eine Funktion, die den betroffenen Inhalt aus dem Array zieht, ummodeliert und als Inhalt für If-Anweisung zurück gibt.
3. Trifft das zu durchlaufende/sich öffnende Script nun auf eine solche If-Anweisung, sollte diese auf die Funktion (Punkt 2) zugreifen und dementsprechend ausführen.
Sämtliche Benutzerrechte eines Users liegen in seiner Session, können also von dort ausgelesen werden. Hat der User ein Recht nicht, so ist es dort auch nicht vorhanden - also kein 0 oder 1, o.ä.
Problembeschreibung:
- Es muss, damit die If-Anweisung korrekt ausgeführt wird, um jedes Benutzerrecht herum modeliert werden, so dass es z.B. so aussieht
- Es können mehrere aber auch nur ein einziges Benutzerrecht/e verlangt werden, jedoch nicht mehrere gleichzeitig vorhandene - also kein &&.
Hat da jemand einen Ansatz für die Lösung? Dh. das == '1' wird von der Funktion bereits gesetzt aber das $_SESSION dafür, bzw. drum rum fällt mir nicht ein.
Oder ganz anders.., gibt es da einen viel besseren, für mich durchführbaren Weg zur Lösung dieses Problems?
Besten Dank
Gruss
PS: Ich geh nun erstmal schlafen - Frühschicht bekommt mir nicht, Montags schon gar nicht *g*
Zur Zeit brüte ich an einem Neuen System (woran ich schon länger brüte - gut Ding, will Weile haben...) und möchte dort, dass, sofern so programmiert, die if-Anweisungen (sei das nun für Ausgaben, Eingaben, SQL-Statements, ...) absolut dynamisch bleibt. Soll heissen, je nach Benutzerrechten des Users, soll z.B. Hinhalt X angezeigt/ausgeführt werden - oder eben nicht. Dazu hat dieses System eine (für meine Verhältnisse) grosse Rechte-Verwaltung und dementsprechend viele verschiedene Rechte. Hatte mir schon im Vorfeld einiges darüber durchgelesen (z.B. rbac, bit-flags, ..) aber die sind mir zum einen nicht immer geheuer und/oder zum anderen würde es vermutlich den Rahmen und die Übersichtlichkeit sprengen - grade bei den bit-flags *denk*.
Folgender Ablauf ist bisher angedacht (sämtlicher Code ist nur Gedankengut, also nichts getestetes, o.ä.):
1. Beim Seitenaufruf werden sämtliche Benutzerrechte dieser Seite aus einer MySQL-Datenbank geladen und in ein Array verfrachtet.
PHP-Code:
$sql = "SELECT * FROM Script_Rechte WHERE SR_Script = '$_SERVER['SCRIPT_NAME'];'";
$result = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_array($result)) {
$s_bereich = $row['SR_Bereich'];
$arr_script_rechte[$s_bereich]['recht'] = $row['SR_Recht'];
$arr_script_rechte[$s_bereich]['name'] = $row['SR_Name'];
}
PHP-Code:
function script_rechte($bereich) {
foreach ($arr_script_rechte AS $key => $value) {
if ($value == $bereich) {
$arr_if_recht == $value['recht'];
}
}
$str_if = implode(" == '1' || ", $arr_if_recht);
$str_if = substr($str_if, 0, -4); // das letzte ' || ' entfernen weil danach ja nix mehr kommt
return $str_if;
}
PHP-Code:
if ($script_rechte(bereichs_name)) {
// anzeigen
}
else {
// nicht anzeigen
}
Problembeschreibung:
- Es muss, damit die If-Anweisung korrekt ausgeführt wird, um jedes Benutzerrecht herum modeliert werden, so dass es z.B. so aussieht
PHP-Code:
$_SESSION['recht_x'] == '1'
Hat da jemand einen Ansatz für die Lösung? Dh. das == '1' wird von der Funktion bereits gesetzt aber das $_SESSION dafür, bzw. drum rum fällt mir nicht ein.
Oder ganz anders.., gibt es da einen viel besseren, für mich durchführbaren Weg zur Lösung dieses Problems?
Besten Dank
Gruss
PS: Ich geh nun erstmal schlafen - Frühschicht bekommt mir nicht, Montags schon gar nicht *g*
Kommentar