2008-08-19 14 views
8

Ich habe versucht, dies mehrmals ohne Glück zu tun. Nachdem ich this post gelesen hatte, hat mich das wieder interessiert. Kann mir jemand sagen, warum das Folgende nicht funktioniert?Implementieren von Berechtigungen in PHP

<?php 

$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if($user == ($editor | $admin)) { 
    echo "Test";  
} 

?> 

Antwort

11

das bitweise Verwenden Sie OR-Operator (|) Bits zu setzen, verwenden Sie den Operator AND (&) um Bits zu überprüfen. Der Code sollte wie folgt aussehen:

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if($user & ($editor | $admin)) { 
     echo "Test";  
    } 

?> 

Wenn Sie nicht verstehen, Binär- und genau das, was die Bit-Operatoren tun, sollten Sie es gehen lernen. Du wirst verstehen, wie du das viel besser machen kannst.

2

Es ist lange her, seit ich PHP verwendet, aber ich davon aus, dass dies funktionieren wird:

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if(($user == $editor) || ($user == $admin)) { 
     echo "Test";  
    } 

?> 
1

(2 | 4) wird zu 6 ausgewertet, aber 2 == 6 ist falsch.

1

@mk: (2 | 4) ausgewertet 6.

1
$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if (user == $editor || $user == $admin) { 
    echo "Test"; 
} 
1

Awesome, das wie der beste Weg scheint Berechtigungen in einem CMS zu tun. Ja? Nein?

Vielleicht habe ich es nie wirklich so gemacht. Was ich getan habe, sind bitweise Operatoren, um eine ganze Reihe von "Ja oder Nein" -Einstellungen in einer einzelnen Zahl in einer einzigen Spalte in der Datenbank zu speichern.

Ich denke, für Berechtigungen, würde dieser Weg gut funktionieren, wenn Sie Berechtigungen in der Datenbank speichern möchten. Wenn jemand will, einige Inhalte schreiben, und will nur Admins und Redakteure, es zu sehen, müssen Sie nur noch das Ergebnis speichern von

($editor | $admin) 

in die Datenbank, dann überprüfen Sie es, so etwas wie

if ($user & $database_row['permissions']) { 
     // display content 
} else { 
     // display permissions error 
} 
0

Meiner Meinung nach skaliert das nicht gut. Ich habe es nicht wirklich versucht, es in einem großen Projekt zu verwenden, aber ein CMS klingt viel zu kompliziert, um es zu verwenden.

6

Um das Rad nicht neu zu erfinden, werfen Sie einen Blick auf ACL/Authentifizierungssysteme wie Zend ACL und Zend Auth? Beide können unabhängig vom gesamten Zend Framework verwendet werden. Access Control ist eine knifflige Situation, daher ist es sinnvoll, zumindest zu prüfen, wie andere Systeme das tun.

0

Es kommt immer darauf an, was Sie brauchen. Wenn du das Zend Framework bereits kennst, würde ich den Zend_Acl/_Auth-Vorschlag, der früher gemacht wurde, absegnen. Aber denken Sie daran, dass jedes Framework mit einer ähnlichen Komponente ausgestattet ist.

Die andere Sache, die in den Sinn kommt, ist LiveUser. Ich arbeite auch gerne damit.

Ich denke, du kannst so ziemlich alles machen und während dein Ansatz sehr einfach aussieht, ist es auch begrenzt da (durch all diese If() s) wirst du einen Großteil der ACL-Logik mitten in stecken Ihre Bewerbung. Was nicht das Größte ist, um es einfach und erweiterbar zu halten. ;)

2

Ich habe dies in der Fehlermeldung verwendet und es funktioniert ganz gut.Wie für Benutzerberechtigungen sollte es sehr gut funktionieren - Sie könnten mehrere Spalten für jede Benutzerberechtigung in Ihrer Datenbank oder eine Benutzerspalte in Ihrer Datenbank haben. Gehen Sie für diese Option.

Verwandte Themen