From 7a33971df0c70537f413e5ff76f5d879200b124b Mon Sep 17 00:00:00 2001 From: Fabian Schieder Date: Mon, 30 Mar 2026 22:18:41 +0200 Subject: [PATCH] Implement role management in user admin panel with deletion and update functionality --- admin_users.php | 78 +++++++++++++++++++++++++++++++++++++++++++-- info/DB_Design.mwb | Bin 20490 -> 20483 bytes 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/admin_users.php b/admin_users.php index ec1690e..929e5a5 100644 --- a/admin_users.php +++ b/admin_users.php @@ -16,6 +16,9 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_user_id'])) { // Vermeide Selbstlöschung zur Sicherheit if ($deleteId !== (int)$_SESSION['user_id']) { + // Zunächst Abhängigkeiten wie Rollen löschen + $conn->query("DELETE FROM userRoles WHERE userID = $deleteId"); + $delStmt = $conn->prepare("DELETE FROM users WHERE userID = ?"); $delStmt->bind_param("i", $deleteId); $delStmt->execute(); @@ -27,8 +30,50 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_user_id'])) { } } +// 2b) Aktion: Rollen aktualisieren +if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_roles_user_id'])) { + $updateId = (int)$_POST['update_roles_user_id']; + $selectedRoles = isset($_POST['roles']) && is_array($_POST['roles']) ? $_POST['roles'] : []; + + if ($updateId === (int)$_SESSION['user_id']) { + $errorMsg = "Du kannst deine eigenen Rollen nicht ändern."; + } else { + $delStmt = $conn->prepare("DELETE FROM userRoles WHERE userID = ?"); + $delStmt->bind_param("i", $updateId); + $delStmt->execute(); + $delStmt->close(); + + if (!empty($selectedRoles)) { + $insStmt = $conn->prepare("INSERT INTO userRoles (userID, roleID) VALUES (?, ?)"); + foreach ($selectedRoles as $roleId) { + $roleIdInt = (int)$roleId; + $insStmt->bind_param("ii", $updateId, $roleIdInt); + $insStmt->execute(); + } + $insStmt->close(); + } + $successMsg = "Rollen erfolgreich gespeichert."; + } +} + +// 2c) Alle verfügbaren Rollen laden +$allRoles = []; +$rolesQuery = $conn->query("SELECT roleID, name FROM roles ORDER BY name ASC"); +if ($rolesQuery) { + while ($r = $rolesQuery->fetch_assoc()) { + $allRoles[] = $r; + } +} + // 3) Alle Benutzer laden -$usersResult = $conn->query("SELECT userID, email, displayname, profilePicture, isActive FROM users ORDER BY userID ASC"); +$usersResult = $conn->query(" + SELECT u.userID, u.email, u.displayname, u.profilePicture, u.isActive, + GROUP_CONCAT(ur.roleID) as roleIDs + FROM users u + LEFT JOIN userRoles ur ON u.userID = ur.userID + GROUP BY u.userID + ORDER BY u.userID ASC +"); ?> @@ -57,11 +102,16 @@ $usersResult = $conn->query("SELECT userID, email, displayname, profilePicture, Profil Name E-Mail + Rollen Aktionen fetch_assoc()): ?> + @@ -70,8 +120,32 @@ $usersResult = $conn->query("SELECT userID, email, displayname, profilePicture, + + +
+ +
+ + + +
+ +
+ +
+ + + + + +
+ + - +
diff --git a/info/DB_Design.mwb b/info/DB_Design.mwb index 25249b2d0ff773aac54488ebb52559a007f7a3cc..f598298a780de0a34f2bed5940d99ce7172b43a9 100644 GIT binary patch delta 17452 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 delta 17496 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⁣Z+YVJU?H$egrL!yp_kwm~)?zOrM6U#_rF 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 aWMWWD1qJ{B000930|2Q2000k@!cRfk7j%&T