Benutzer verwalten
Alle Benutzer
Noch keine Benutzer vorhanden
requireAdmin(); $db = Database::getInstance(); $mailer = new Mailer(); $appTitle = $db->getSetting('app_title', 'UniFi Voucher System'); $error = ''; $success = ''; // Benutzer bearbeiten if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['edit_user'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { try { $userId = (int)$_POST['user_id']; $isAdmin = isset($_POST['is_admin']) ? 1 : 0; $siteIds = $_POST['site_ids'] ?? []; // Alten Status abrufen $oldUser = $db->fetchOne("SELECT * FROM users WHERE id = ?", [$userId]); $oldIsAdmin = $oldUser['is_admin']; $oldSites = $db->fetchAll("SELECT s.name FROM sites s INNER JOIN user_site_access usa ON s.id = usa.site_id WHERE usa.user_id = ?", [$userId]); // Admin-Status aktualisieren $db->query("UPDATE users SET is_admin = ? WHERE id = ?", [$isAdmin, $userId]); // Alte Site-Zugriffe löschen (nur wenn nicht Admin) $db->query("DELETE FROM user_site_access WHERE user_id = ?", [$userId]); // Neue Site-Zugriffe zuweisen (nur wenn nicht Admin) $newSites = []; if (!$isAdmin && !empty($siteIds)) { foreach ($siteIds as $siteId) { $db->execute( "INSERT INTO user_site_access (user_id, site_id) VALUES (?, ?)", [$userId, $siteId] ); $site = $db->fetchOne("SELECT name FROM sites WHERE id = ?", [$siteId]); if ($site) { $newSites[] = $site['name']; } } } // E-Mail-Benachrichtigung vorbereiten $changes = []; if ($oldIsAdmin != $isAdmin) { if ($isAdmin) { $changes[] = "Sie wurden zum Administrator ernannt"; } else { $changes[] = "Ihre Administrator-Rechte wurden entfernt"; } } // Site-Änderungen erkennen $oldSiteNames = array_column($oldSites, 'name'); $addedSites = array_diff($newSites, $oldSiteNames); $removedSites = array_diff($oldSiteNames, $newSites); if (!empty($addedSites)) { $changes[] = "Zugriff gewährt auf: " . implode(', ', $addedSites); } if (!empty($removedSites)) { $changes[] = "Zugriff entfernt von: " . implode(', ', $removedSites); } if ($isAdmin && !$oldIsAdmin) { $changes[] = "Sie haben nun Zugriff auf alle Sites"; } // E-Mail senden wenn Änderungen vorliegen if (!empty($changes)) { $mailer->sendUserNotification($oldUser['email'], $oldUser['name'], $changes); } $success = 'Benutzer erfolgreich aktualisiert!' . (!empty($changes) ? ' Benachrichtigung wurde versendet.' : ''); } catch (Exception $e) { $error = $e->getMessage(); } } } // Benutzer hinzufügen if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_user'])) { if (!$auth->validateCsrfToken($_POST['csrf_token'] ?? '')) { $error = 'Ungültiges Sicherheits-Token'; } else { try { $email = trim($_POST['email']); $name = trim($_POST['name']); $password = $_POST['password']; $isAdmin = isset($_POST['is_admin']) ? 1 : 0; $siteIds = $_POST['site_ids'] ?? []; if (empty($email) || empty($name) || empty($password)) { throw new Exception('Bitte füllen Sie alle Pflichtfelder aus'); } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new Exception('Ungültige E-Mail-Adresse'); } if (strlen($password) < 8) { throw new Exception('Passwort muss mindestens 8 Zeichen lang sein'); } // Prüfen ob E-Mail bereits existiert $existing = $db->fetchOne("SELECT id FROM users WHERE email = ?", [$email]); if ($existing) { throw new Exception('Ein Benutzer mit dieser E-Mail existiert bereits'); } // Benutzer anlegen $userId = $auth->registerUser($email, $name, $password, $isAdmin); if (!$userId) { throw new Exception('Benutzer konnte nicht erstellt werden'); } // Site-Zugriffe zuweisen (nur wenn nicht Admin) if (!$isAdmin && !empty($siteIds)) { foreach ($siteIds as $siteId) { $db->execute( "INSERT INTO user_site_access (user_id, site_id) VALUES (?, ?)", [$userId, $siteId] ); } } $success = 'Benutzer erfolgreich erstellt!'; } catch (Exception $e) { $error = $e->getMessage(); } } } // Benutzer löschen if (isset($_GET['delete']) && isset($_GET['token'])) { if ($auth->validateCsrfToken($_GET['token'])) { $deleteId = (int)$_GET['delete']; $currentUserId = $_SESSION['user_id']; if ($deleteId === $currentUserId) { $error = 'Sie können sich nicht selbst löschen'; } else { $db->query("DELETE FROM users WHERE id = ?", [$deleteId]); $success = 'Benutzer erfolgreich gelöscht!'; } } else { $error = 'Ungültiges Sicherheits-Token'; } } // Benutzer aktivieren/deaktivieren if (isset($_GET['toggle']) && isset($_GET['token'])) { if ($auth->validateCsrfToken($_GET['token'])) { $toggleId = (int)$_GET['toggle']; $currentUserId = $_SESSION['user_id']; if ($toggleId === $currentUserId) { $error = 'Sie können sich nicht selbst deaktivieren'; } else { $user = $db->fetchOne("SELECT is_active FROM users WHERE id = ?", [$toggleId]); if ($user) { $newStatus = $user['is_active'] ? 0 : 1; $db->query("UPDATE users SET is_active = ? WHERE id = ?", [$newStatus, $toggleId]); $success = 'Benutzer-Status aktualisiert!'; } } } } // Alle Benutzer und Sites abrufen $users = $db->fetchAll("SELECT * FROM users ORDER BY name"); $sites = $db->fetchAll("SELECT * FROM sites WHERE is_active = 1 ORDER BY name"); // Site-Zugriffe für jeden Benutzer abrufen $userSiteAccess = []; foreach ($users as $user) { $userSiteAccess[$user['id']] = $db->fetchAll( "SELECT s.name FROM sites s INNER JOIN user_site_access usa ON s.id = usa.site_id WHERE usa.user_id = ?", [$user['id']] ); } $currentUser = $auth->getCurrentUser(); ?>
Noch keine Benutzer vorhanden