Im Websystem ist die Benutzerberechtigungssteuerung ein äußerst wichtiger Teil. Ein angemessenes Berechtigungssystem kann nicht nur die sensiblen Daten des Systems schützen, sondern auch sicherstellen, dass Benutzer nur auf den Inhalt zugreifen können, auf den sie zugreifen sollten. In PHP können wir die Funktion Binec () verwenden, um Bitoperationen zu kombinieren, um einen effizienten und leicht zu erweiterenden Berechtigungssteuerungsmechanismus zu erstellen. In diesem Artikel wird ausführlich vorgestellt, wie diese beiden zum Erstellen eines Benutzerberechtigungssystems verwendet werden.
Die Kernidee der Erlaubniskontrolle besteht darin, jede Berechtigung in ein binäres Bit abstrahieren. Beispielsweise kann ein 8-Bit-Berechtigungsfeld 8 Arten von Berechtigungen darstellen, und 1 oder 0 an jedem Bit gibt an, ob die Berechtigung aktiviert ist.
Nehmen wir beispielsweise an, dass die folgenden Berechtigungen definiert werden:
Erlaubnisposition | Erlaubniswert | Erlaubnisname |
---|---|---|
0 | 1 | Inhalt anzeigen |
1 | 2 | Inhalt bearbeiten |
2 | 4 | Inhalte löschen |
3 | 8 | Inhalt überprüfen |
4 | 16 | Benutzer verwalten |
5 | 32 | Postinhalte posten |
6 | 64 | Bericht anzeigen |
7 | 128 | Super Administrator |
Die Berechtigungen eines Benutzers können durch eine binäre Zeichenfolge (z. B. "10101010" ) dargestellt werden, die eine Reihe aktivierter und deaktivierter Berechtigungen darstellt. Wir können Binec () verwenden, um diese Zeichenfolge in eine Dezimalzahl umzuwandeln und dann Bitvorgänge zu verwenden, um festzustellen, ob eine bestimmte Berechtigung aktiviert ist.
Nehmen wir zunächst an, dass der Berechtigungswert eines bestimmten Benutzers 170 beträgt, dh 10101010 in binär, und er hat die Berechtigungen 1, 3, 5 und 7.
Wir können den folgenden Code verwenden, um festzustellen, ob wir eine bestimmte Genehmigung haben:
<?php
// Erlaubniskonstanten definieren
define('PERM_VIEW', 1); // 00000001
define('PERM_EDIT', 2); // 00000010
define('PERM_DELETE', 4); // 00000100
define('PERM_APPROVE', 8); // 00001000
define('PERM_USER', 16); // 00010000
define('PERM_PUBLISH', 32); // 00100000
define('PERM_REPORT', 64); // 01000000
define('PERM_ADMIN', 128); // 10000000
// Angenommen, der Berechtigungswert eines Benutzers ist170(Binär10101010)
$userPermissions = 170;
// Überprüfen Sie, ob die Bearbeitungsgenehmigung vorliegt
if ($userPermissions & PERM_EDIT) {
echo "Der Benutzer verfügt über Bearbeitungsberechtigungen";
} else {
echo "Der Benutzer hat keine Bearbeitungsberechtigungen";
}
?>
Der obige Code verwendet den & Bediener, um festzustellen, ob das angegebene Berechtigungsbit 1 beträgt. Auf diese Weise können wir leicht feststellen, ob der Benutzer spezifische Berechtigungen hat.
Um dem Benutzer Berechtigungen zu geben, müssen Sie nur das Berechtigungsbit ( | ) ausführen oder berechnen:
<?php
$userPermissions = 0; // Die erste Erlaubnis ist0
// Hinzufügen zu“Inhalt anzeigen”Und“Postinhalte posten”Berechtigungen
$userPermissions |= PERM_VIEW;
$userPermissions |= PERM_PUBLISH;
echo $userPermissions; // Die Ausgabe ist33
?>
Um eine bestimmte Genehmigung zu widerrufen, sind nicht ( & ~ ) Operationen erforderlich:
<?php
// 原始Berechtigungen为:Durchsuchen、bearbeiten、freigeben(Im Augenblick 1 + 2 + 32 = 35)
$userPermissions = 35;
// Widerrufen“bearbeiten”Berechtigungen
$userPermissions &= ~PERM_EDIT;
echo $userPermissions; // Das Ergebnis ist33
?>
Berechtigungswerte können schließlich in den Datenbankfeldern, wie z .
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50),
permissions INT DEFAULT 0
);
Lesen Sie Benutzerberechtigungen und überprüfen Sie:
<?php
// 假设从数据库中取出Berechtigungen字段为 $permissions
$permissions = 170;
if ($permissions & PERM_DELETE) {
echo "Sie können Inhalte löschen";
} else {
echo "Sie haben keine Erlaubnis zum Löschen von Inhalten";
}
?>
Wenn ein Administrator ein Hintergrundverwaltungssystem einnimmt, muss das System feststellen, ob bestimmte Funktionsschaltflächen angezeigt werden sollen. Sie können es in der Vorlage steuern von:
<?php
if ($adminPermissions & PERM_USER) {
echo '<a href="https://m66.net/admin/users">Benutzer verwalten</a>';
}
?>
Diese durch Bit Operations implementierte Berechtigungssteuerungsmethode hat die folgenden Vorteile:
Speichereinsparungen : Alle Berechtigungen werden in ein ganzzahliges Feld verschmolzen und sparen Platz.
Effiziente Abfrage : Das Urteilsvermögen wird durch Bit -Operationen abgeschlossen und die Geschwindigkeit ist extrem schnell.
Erweiterungsflexibilität : Fügen Sie einfach ein neues Berechtigungsbit hinzu, um einen neuen Berechtigungsart hinzuzufügen.
Geeignet für kleine und mittelgroße Systeme oder Szenarien mit relativ festen Berechtigten. Wenn die Systemberechtigungen komplex sind und eine mehrdimensionale Steuerung erfordern, wird empfohlen, das mit der Datenbank kombinierte RBAC-Modell (rollenbasierte Zugriffskontrolle) zu verwenden, um eine feinere Granularverwaltung zu erreichen.
Durch die Kombination von Bindec () und Bit -Operation können wir eine einfache und effiziente Methode für die Verwaltung von Benutzerberechtigten implementieren. Es ist sehr bequem, binäre und ganze Zahlen in PHP zu manipulieren und ist sehr geeignet, um leichte Berechtigungssteuerungssysteme zu bauen. In tatsächlichen Projekten wird empfohlen, Berechtigungskonstanten und Urteilslogik in Klassen oder Funktionen zu verkörpern, um die Wartbarkeit und Lesbarkeit zu verbessern.