Frage

Ich habe versucht, dies zu tun, der sich mehrmals mit kein Glück.Nach dem Lesen dieser Beitrag, es hat mich interessiert zu tun, diese wieder.So kann mir jemand sagen, warum das folgende nicht funktioniert?

<?php

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

$user = $editor;

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

?>
War es hilfreich?

Lösung

Verwenden Sie den bitweisen or-operator ( | ), um die bits verwenden Sie den AND-operator ( & ), um zu prüfen bits.Ihr 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 bitweisen Operatoren dies tun, sollten Sie gehen lernen.Sie werden verstehen, wie dies zu tun ist viel besser.

Andere Tipps

Im Interesse der nicht das Rad neu erfinden, warum nicht werfen Sie einen Blick auf ACL/Authentifizierungssysteme wie Zend ACL und Zend Auth?Beide können verwendet werden, unabhängig von der Zend Framework als ganzes.Access Control ist eine schwierige situation, so profitiert man zumindest schauen, wie andere Systeme tun es.

Es ist schon eine lange Zeit, seit ich PHP verwendet, aber ich gehe davon aus, dass dies funktionieren wird:

<?php

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

    $user = $editor;

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

?>

Ich habe diese verwendet werden, Fehler in der Berichterstattung, und es funktioniert ganz gut.Wie für Benutzer-Berechtigungen-es sollte sehr gut funktionieren - Sie können mehrere Spalten für jeden Benutzer die Berechtigung in Ihrer Datenbank oder einem userlevel-Spalte in der Datenbank.Gehen Sie für diese option.

(2 | 4) ist die Auswertung zu 6, aber 2 == 6 ist falsch.

@mk:(2 | 4) als 6.

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

$user = $editor;

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

Genial, diese scheint, wie der beste Weg ist zu tun die Berechtigungen in einem CMS.Ja?Nein?

Vielleicht habe ich nie wirklich getan es auf diese Weise.Was ich gemacht habe, ist bitweise Operatoren verwendet zu speichern eine ganze Reihe von "ja" und "Nein" - Einstellungen in eine einzelne Zahl in einer einzelnen Spalte in der Datenbank.

Ich denke, für die Berechtigungen, auf diese Weise gut funktionieren würde, wenn Sie speichern möchten, und die Berechtigungen in der Datenbank.Wenn jemand will, um post einige Inhalte, und will nur admins und Redakteure, um zu sehen es, Sie müssen nur, zu speichern

 ($editor | $admin)

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

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

In meiner Meinung nach dies nicht gut zu skalieren.Ich habe nicht wirklich versucht, mit ihm auf ein großes Projekt, aber eine CMS-sounds Weg, zu kompliziert in der Anwendung dieser auf.

Es hängt immer davon ab, was Sie brauchen.Wenn Sie wissen, Zend Framework schon, dann würde ich die zweite Zend_Acl/_Auth Vorschlag, das war früher.Aber Bedenken Sie, dass jeder Rahmen, vermutlich kommt mit eine ähnliche Komponente.

Die andere Sache, die kommt zu Geist ist LiveUser.Ich arbeite gerne mit ihm eine Menge, wie gut.

Ich denke, man kann so ziemlich alles, und während Ihr Ansatz sieht sehr einfach, es ist auch begrenzt, da (durch die wenn()'s) Sie sind gonna eine Menge der ACL-Logik direkt in der Mitte Ihrer Anwendung.Das ist nicht das größte ist, was zu tun ist, um es einfach zu halten und erweiterbar.;)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top