Heim > Artikel > Backend-Entwicklung > Verwenden Sie PHP und MySQL, um ein leistungsstarkes System zur Benutzerrechtekontrolle zu implementieren
In modernen Webanwendungen ist die Kontrolle der Benutzerberechtigungen von entscheidender Bedeutung. Um die Sicherheit und Integrität einer Anwendung zu gewährleisten, muss der Benutzerzugriff auf bestimmte Vorgänge und Informationen eingeschränkt werden und die spezifischen Aufgaben, die Benutzer ausführen dürfen, müssen definiert werden. In diesem Artikel werde ich vorstellen, wie Sie mit PHP und MySQL ein leistungsstarkes Benutzerberechtigungskontrollsystem erstellen, um die Sicherheit und Integrität Ihrer Webanwendungen zu gewährleisten.
1. Design von Datenbanktabellen
In der MySQL-Datenbank benötigen wir mindestens zwei Tabellen, um das Benutzerberechtigungskontrollsystem zu implementieren. In der ersten Tabelle werden grundlegende Informationen für alle Benutzer aufgezeichnet, einschließlich Benutzername, Passwort und E-Mail-Adresse. Die zweite Tabelle ist die Berechtigungstabelle, die die Berechtigungen jeder Rolle/Benutzergruppe aufzeichnet. Daher müssen wir die folgenden zwei Tabellen in der Datenbank erstellen:
CREATE TABLE users
(users
(
id
int(11) NOT NULL AUTO_INCREMENT,
username
varchar(50) NOT NULL,
password
varchar(255) NOT NULL,
email
varchar(100) NOT NULL,
PRIMARY KEY (id
)
);
CREATE TABLE roles
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(50) NOT NULL,
PRIMARY KEY (id
)
);
我们还需要一个将用户和角色关联的表。这个表将用户ID映射到角色ID。让我们来创建这个表。
CREATE TABLE role_user
(
role_id
int(11) NOT NULL,
user_id
int(11) NOT NULL,
PRIMARY KEY (role_id
,user_id
),
CONSTRAINT FK_role_user_role_id
FOREIGN KEY (role_id
) REFERENCES roles
(id
),
CONSTRAINT FK_role_id_user_id
FOREIGN KEY (user_id
) REFERENCES users
(id
id
int(11) NOT NULL AUTO_INCREMENT,
Benutzername
varchar(50) NICHT NULL,
Passwort
varchar(255) NICHT NULL, E-Mail
varchar(100) NICHT NULL,
id
));
CREATE TABLE roles
(
id
int(11) NOT NULL AUTO_INCREMENT, name
varchar(50) NOT NULL,id
)Wir benötigen außerdem eine Tabelle, die Benutzer und Rollen zuordnet. Diese Tabelle ordnet Benutzer-IDs Rollen-IDs zu. Lassen Sie uns diese Tabelle erstellen.
CREATE TABLE role_user
(
role_id
int(11) NOT NULL, user_id
int(11) NOT NULL ,
role_id
,user_id
),FK_role_user_role_id
FOREIGN KEY (role_id
) REFERENCES Rollen
(id
),FK_role_id_user_id
FOREIGN KEY (user_id
) REFERENCES users
(id
)2. Implementierung des Benutzerrechtekontrollsystems
Ein Benutzer ist eine Person, die mit einer Anwendung interagiert. Jedem Benutzer werden eine oder mehrere Rollen zugewiesen, die die Aktionen definieren, die der Benutzer ausführen und auf die er zugreifen kann.
Jetzt wollen wir sehen, wie man dieses System implementiert.
🎜🎜Benutzer erstellen🎜🎜🎜Für jeden neuen Benutzer müssen wir einen entsprechenden Benutzerdatensatz erstellen. Wir erstellen für jeden Benutzer einen Datensatz in der Tabelle „Benutzer“, einschließlich Benutzername, Passwort und E-Mail-Adresse. Verwenden Sie den folgenden Code, um den Benutzer zu erstellen. 🎜function create_user($username, $password, $email) { // Encrypt password $encrypted_password = password_hash($password, PASSWORD_DEFAULT); // Prepare SQL statement $sql = "INSERT INTO users (username, password, email) VALUES (?, ?, ?)"; // Bind parameters $stmt = $conn->prepare($sql); $stmt->bind_param("sss", $username, $encrypted_password, $email); // Execute statement if ($stmt->execute()) { return true; } else { return false; } }🎜🎜Erstellen einer Rolle🎜🎜🎜Das Erstellen einer Rolle ist sehr einfach. Fügen Sie einfach einen Datensatz in die Tabelle „Rollen“ ein. Hier ist ein Beispiel. 🎜
function create_role($name) { // Prepare SQL statement $sql = "INSERT INTO roles (name) VALUES (?)"; // Bind parameters $stmt = $conn->prepare($sql); $stmt->bind_param("s", $name); // Execute statement if ($stmt->execute()) { return true; } else { return false; } }🎜🎜Benutzerrollen zuweisen🎜🎜🎜Da wir nun Benutzer und Rollen erstellt haben, müssen wir sie verknüpfen. Rollen können durch Einfügen der Rollen-ID und Benutzer-ID in die Tabelle „role_user“ zugewiesen werden. Nachfolgend finden Sie einige Beispielcodes. 🎜
function assign_role_to_user($role_id, $user_id) { // Prepare SQL statement $sql = "INSERT INTO role_user (role_id, user_id) VALUES (?, ?)"; // Bind parameters $stmt = $conn->prepare($sql); $stmt->bind_param("ii", $role_id, $user_id); // Execute statement if ($stmt->execute()) { return true; } else { return false; } }🎜🎜Überprüfen Sie, ob der Benutzer die Berechtigung hat🎜🎜🎜Abschließend müssen wir prüfen, ob der Benutzer die Berechtigung zum Ausführen einer Aktion hat. Wir finden alle Rollen, zu denen der Benutzer gehört, und prüfen, ob die Rollen über die erforderlichen Berechtigungen verfügen. Gibt true zurück, wenn der Benutzer über die Berechtigung verfügt, andernfalls false. Nachfolgend finden Sie einige Beispielcodes. 🎜
function has_permission($user_id, $permission) { // Fetch user roles $sql = "SELECT role_id FROM role_user WHERE user_id = ?"; $stmt = $conn->prepare($sql); $stmt->bind_param("i", $user_id); $stmt->execute(); $result = $stmt->get_result(); // Check if any role has permission while ($row = $result->fetch_assoc()) { $sql2 = "SELECT permissions FROM roles WHERE id = " . $row['role_id']; $result2 = $conn->query($sql2); if ($result2->num_rows == 1) { $row2 = $result2->fetch_assoc(); $permissions = json_decode($row2['permissions'], true); if (in_array($permission, $permissions)) { return true; } } } // Permission not found return false; }🎜3. Zusammenfassung🎜🎜Die Verwendung von PHP und MySQL zum Erstellen eines Benutzerberechtigungskontrollsystems kann die Sicherheit und Integrität von Webanwendungen gewährleisten. Wir können den Benutzerzugriff auf bestimmte Vorgänge und Informationen basierend auf Rollen und Berechtigungen beschränken. Durch dieses System können wir Webanwendungen vor unbefugtem Zugriff schützen und so die Gesamtsicherheit verbessern. 🎜
Das obige ist der detaillierte Inhalt vonVerwenden Sie PHP und MySQL, um ein leistungsstarkes System zur Benutzerrechtekontrolle zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!