Hi,
wie schon im Titel zu lesen ist, habe ich ein Problem mit der Rechteverwaltung.
Diese wird binär verglichen.
Bsp.
Forenadmin: 001 // 1
Gästebuchverwaltung: 010 // 2
Benutzerverwaltung: 100 // 4
...
Wenn der Benutzer also Forenadmin ist und auch noch die Benutzer verwalten darf, hat er das Recht 5.
Ich habe folgende Funktion um anzeigen zu lassen, ob entweder der eingeloggte Benutzer, oder ein mit dem zweiten Parameter übergebener Benutzer ein Recht haben (Parameter 1):
Und meine Datenbankstruktur "rights" sieht so aus:
Meine Rechte-Abfrage in der Benutzerverwaltung sieht so aus:
Die uid ist in der URL mitgegeben, und die Benutzerrechte wurden davor schon mit einer SQL-Query ausgelesen.
Leider werden immer Checkboxen ausgewählt, welche ich nicht nachvollziehen kann...
Vll. kann mir ja einer von euch sagen, warum meine Funktion nicht funktioniert...
Ich freue mich über jede Antwort.
Grüße SilentSight
wie schon im Titel zu lesen ist, habe ich ein Problem mit der Rechteverwaltung.
Diese wird binär verglichen.
Bsp.
Forenadmin: 001 // 1
Gästebuchverwaltung: 010 // 2
Benutzerverwaltung: 100 // 4
...
Wenn der Benutzer also Forenadmin ist und auch noch die Benutzer verwalten darf, hat er das Recht 5.
Ich habe folgende Funktion um anzeigen zu lassen, ob entweder der eingeloggte Benutzer, oder ein mit dem zweiten Parameter übergebener Benutzer ein Recht haben (Parameter 1):
PHP-Code:
function getRight($userright, $uid = NULL) {
$rights_sel = mysql_query('SELECT * FROM rights');
$rights = array();
while($rights_fetch = mysql_fetch_assoc($rights_sel)) {
$rights[$rights_fetch['name']] = $rights_fetch['bit'];
}
if(isset($uid)) {
$user_sel = mysql_query('SELECT rights FROM accounts WHERE id = "'.$uid.'"');
} else {
$user_sel = mysql_query('SELECT rights FROM accounts WHERE id = "'.$_SESSION['uid'].'"');
}
$user = mysql_fetch_assoc($user_sel);
foreach($rights as $name => $bit) {
if(($user['rights'] & $userright) == $bit) {
return true;
}
}
return false;
}
Code:
name | bit Recht 1 | 1 Recht 2 | 2 Recht 3 | 4 Recht 4 | 8 Recht 5 | 16 Recht 6 | 32
PHP-Code:
for($i = 0; $right = mysql_fetch_assoc($userrights); $i++) {
echo '<input type="checkbox" name="rights[]" id="right_'.$i.'" value="'.$right['bit'].'" '.((getRight($right['bit'], $_GET['uid']) ? 'checked="checked"' : '').' /><label for="right_'.$i.'"> '.$right['name'].'</label><br />';
}
Leider werden immer Checkboxen ausgewählt, welche ich nicht nachvollziehen kann...
Vll. kann mir ja einer von euch sagen, warum meine Funktion nicht funktioniert...
Ich freue mich über jede Antwort.
Grüße SilentSight
Kommentar