Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Bit-Manipulation und MySQL-Abruf in PHP

Haben Sie darüber nachgedacht, Ihre Berechtigungen als Ganzzahl zu speichern, wobei jede Berechtigung ein Binärwert ist (dh 1,2,4,8,16), und Sie alle ihre Berechtigungen addieren. Sie können dann mit dem &-Operator prüfen, ob sie eine bestimmte Berechtigung haben

So:

if ($accessLevel & $userPermissions) 

Das gibt Ihnen ein viel benutzerfreundlicheres System als das Speichern einer Binärzahl

Wie in den Kommentaren angefordert, ein wenig mehr Informationen.

Sie würden Ihre Benutzertabelle so einrichten, dass sie ein ganzzahliges Feld zum Speichern Ihrer Berechtigungen enthält. Jede Ihrer Berechtigungsstufen hätte ein binäres Vielfaches (kennen Sie hier nicht den richtigen Begriff), das dem Wert eines binären Bits entspricht. Zum Beispiel:

Read - 1
Edit - 2
Create - 4
Delete - 8

Und so weiter, so viele wie nötig. Um eine Berechtigungsstufe für Benutzer zu erstellen, verknüpfen Sie die Werte mit ODER. Nehmen wir an, die oben genannten Ebenen sind in einer Klasse als statische Werte gespeichert, Sie würden sie folgendermaßen erstellen:

$newUser->Permissions = Permissions::Read | Permissions::Create;

Dadurch erhalten Sie einen Benutzer, der lesen und erstellen, aber nicht bearbeiten oder löschen kann.

Um zu überprüfen, ob ein Benutzer berechtigt ist, eine Aktion auszuführen, verwenden Sie AND:

if ($newUser->Permissions & Permissions::Read) {
    echo 'You can do this!';
}  else {
    echo 'You can't this!';
}

Dadurch erhalten Sie ein einfaches Datenbankfeld, das so erweiterbar ist, wie Sie es realistisch benötigen, und einfach zu verwendende Überprüfungen und Änderungen. Sie sollten auch in Betracht ziehen, Berechtigungsstufen in einer anderen Tabelle usw. zu speichern, je nachdem, welche Anpassungsstufe Sie möglicherweise benötigen.