$config */ $config = require $configPath; use App\Controllers\AuthController; use App\Controllers\DashboardController; use App\Controllers\UserManagementController; /** * Hilfsfunktion: Prüft, ob ein Benutzer eingeloggt ist. * Wenn nicht, wird auf die Login-Seite umgeleitet. * * @param array $config */ function requireLogin(array $config): void { // session_key_user aus dem Config-Array lesen. Wenn nicht gesetzt oder null, Standard "admin_user" verwenden. $sessionKey = $config['security']['session_key_user'] ?? 'admin_user'; // Prüfen, ob in $_SESSION unter diesem Key ein eingeloggter Benutzer hinterlegt ist. // Falls nicht, zurück zur Login-Seite umleiten. if (isset($_SESSION[$sessionKey]) === false) { header('Location: index.php?route=login'); exit; } } /** * Verarbeitet ein View-Result oder Redirect-Result. * * @param array|null $result */ function handleResult(?array $result): void { if ($result === null) { return; } if (isset($result['redirect']) === true) { header('Location: ' . (string)$result['redirect']); exit; } $contentView = (string)($result['view'] ?? ''); $viewData = (array)($result['data'] ?? []); // Standard: Wir gehen davon aus, dass es KEINE Loginseite ist, // außer der Controller sagt explizit etwas anderes. if (!array_key_exists('loginPage', $viewData)) { $viewData['loginPage'] = false; } $pageTitle = (string)($result['pageTitle'] ?? ''); $activeMenu = $result['activeMenu'] ?? null; if ($contentView === '' || file_exists($contentView) === false) { http_response_code(500); echo 'Interner Fehler: Content-View wurde nicht gefunden.'; exit; } // Hier rufen wir jetzt die Layout-Funktion aus layout.php auf renderLayout($contentView, $viewData, $pageTitle, is_string($activeMenu) ? $activeMenu : null); } // Zentrale Controller der Anwendung initialisieren und ihnen die vollständige Konfiguration übergeben. // Die Controller holen sich daraus bei Bedarf ihre spezifischen Teilkonfigurationen (z. B. "ldap" oder "snmp"). $authController = new AuthController($config); $dashboardController = new DashboardController($config); $userManagementController = new UserManagementController($config); // Route aus dem Query-Parameter lesen. Standardroute ist "login", // sodass nicht angemeldete Benutzer automatisch auf die Login-Seite geführt werden. $route = $_GET['route'] ?? 'login'; // Einfache Router-Logik: Jede Route ruft eine Controller-Methode auf und // übergibt deren View-Result an handleResult(). Neue Seiten werden hier ergänzt. switch ($route) { case 'login': // Login-Formular anzeigen (ggf. mit Fehlermeldung) $result = $authController->showLoginForm(); handleResult($result); break; case 'login.submit': if ($_SERVER['REQUEST_METHOD'] !== 'POST') { // Falscher HTTP-Verb: einfach zurück zum Login header('Location: index.php?route=login'); exit; } $result = $authController->processLogin(); handleResult($result); break; case 'logout': $result = $authController->logout(); handleResult($result); break; case 'dashboard': requireLogin($config); $result = $dashboardController->show(); handleResult($result); break; case 'users': requireLogin($config); $result = $userManagementController->show(); handleResult($result); break; default: http_response_code(404); echo 'Route nicht gefunden.'; break; }