135 lines
4.4 KiB
PHP
135 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* @file bootstrap.php
|
|
* @brief Zentrale Initialisierungsdatei der Anwendung.
|
|
*
|
|
* @details Diese Datei dient als Bootstrap-Skript für die gesamte Webanwendung.
|
|
* Sie ist dafür verantwortlich, grundlegende Konfigurationen vorzunehmen,
|
|
* die Session-Verwaltung zu initiieren und die Datenbankverbindung herzustellen.
|
|
* Zudem werden hier die Rollen eines aktuell angemeldeten Benutzers bei jedem
|
|
* Request frisch aus der Datenbank geladen und in der Session gespeichert,
|
|
* um eine konsistente und sichere Rechteverwaltung zu gewährleisten.
|
|
*
|
|
* @author Automatisch generierter Doxygen-Header / Erweitert durch Entwickler
|
|
* @date 2026-04-04
|
|
*/
|
|
|
|
/**
|
|
* Einbinden der grundlegenden Datenbankfunktionen.
|
|
*
|
|
* Beinhaltet die Funktion db_connect() und weitere für den Datenbankzugriff
|
|
* notwendige Konfigurationen.
|
|
*/
|
|
require_once __DIR__ . '/db.php';
|
|
|
|
/**
|
|
* Aktivierung der Fehlerausgabe für Entwicklungszwecke.
|
|
*
|
|
* Diese Einstellungen sorgen dafür, dass alle Arten von Fehlern, Warnungen
|
|
* und Parse-Fehlern direkt im Browser angezeigt werden. Dies ist besonders
|
|
* nützlich während der Entwicklung, sollte aber in einer Produktionsumgebung
|
|
* idealerweise deaktiviert oder durch ein entsprechendes Logging ersetzt werden.
|
|
*/
|
|
ini_set('display_errors', '1');
|
|
ini_set('display_startup_errors', '1');
|
|
error_reporting(E_ALL);
|
|
|
|
/**
|
|
* Initialisierung der PHP-Session.
|
|
*
|
|
* Es wird geprüft, ob bereits eine aktive Session existiert. Falls nicht,
|
|
* werden spezifische Cookie-Parameter gesetzt (z.B. eine Lebensdauer von 30 Tagen)
|
|
* und die Session wird gestartet. Diese Konfiguration erhöht die Sicherheit
|
|
* (mittels httponly und samesite=Lax) und verbessert das Benutzererlebnis
|
|
* durch ein langlebiges Session-Cookie.
|
|
*/
|
|
if (session_status() !== PHP_SESSION_ACTIVE)
|
|
{
|
|
// Session-Cookie Lifetime auf 30 Tage setzen
|
|
session_set_cookie_params([
|
|
'lifetime' => 60 * 60 * 24 * 30, // 30 days
|
|
'path' => '/',
|
|
'domain' => '',
|
|
'secure' => false,
|
|
'httponly' => true,
|
|
'samesite' => 'Lax'
|
|
]);
|
|
session_start();
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Aktualisierung der Benutzerrollen aus der Datenbank.
|
|
*
|
|
* @details Dieser Block wird ausgeführt, um zu Beginn jedes HTTP-Requests
|
|
* die aktuellen Rechte/Rollen des eingeloggten Nutzers zu evaluieren.
|
|
* Ist eine `user_id` in der Session vorhanden, wird eine Datenbankabfrage
|
|
* durchgeführt, um alle verknüpften Rollen des entsprechenden Nutzers zu ermitteln.
|
|
* Die gefundenen Rollen werden danach als Array in `$_SESSION['user_roles']` gespeichert.
|
|
* Ist kein Benutzer eingeloggt, wird das Array leer gelassen.
|
|
*/
|
|
if (!empty($_SESSION['user_id']))
|
|
{
|
|
/**
|
|
* @var mysqli $__bsConn
|
|
* @brief Die aktive Datenbankverbindung für den Bootstrap-Prozess.
|
|
*/
|
|
$__bsConn = db_connect();
|
|
|
|
/**
|
|
* @var mysqli_stmt|false $__bsStmt
|
|
* @brief Prepared Statement zum Abfragen der Benutzerrollen.
|
|
*
|
|
* Hierbei werden die Tabellen `userRoles` (ur) und `roles` (r) miteinander verknüpft,
|
|
* um anhand der `userID` die textuellen Namen der Rollen zu selektieren.
|
|
*/
|
|
$__bsStmt = $__bsConn->prepare('SELECT r.name FROM userRoles ur JOIN roles r ON r.roleID = ur.roleID WHERE ur.userID = ?');
|
|
|
|
if ($__bsStmt)
|
|
{
|
|
/**
|
|
* @var int $__bsUid
|
|
* @brief Typisierte Benutzer-ID, gecastet aus der Session.
|
|
*/
|
|
$__bsUid = (int)$_SESSION['user_id'];
|
|
|
|
// Parameterbindung (Interger) an das Prepared Statement
|
|
$__bsStmt->bind_param('i', $__bsUid);
|
|
|
|
// Ausführung der Abfrage
|
|
$__bsStmt->execute();
|
|
|
|
/**
|
|
* @var mysqli_result $__bsResult
|
|
* @brief Das Resultset der ausgeführten Datenbankabfrage.
|
|
*/
|
|
$__bsResult = $__bsStmt->get_result();
|
|
|
|
// Reset des Rollen-Arrays in der Session
|
|
$_SESSION['user_roles'] = [];
|
|
|
|
/**
|
|
* Iteration durch die zurückgegebenen Datensätze und Speicherung in der Session.
|
|
*/
|
|
while ($__bsRow = $__bsResult->fetch_assoc())
|
|
{
|
|
$_SESSION['user_roles'][] = $__bsRow['name'];
|
|
}
|
|
|
|
// Schließen des Statements, um Ressourcen freizugeben
|
|
$__bsStmt->close();
|
|
}
|
|
|
|
// Schließen der Datenbankverbindung nach erfolgreicher Abfrage
|
|
$__bsConn->close();
|
|
}
|
|
else
|
|
{
|
|
/**
|
|
* Für Gäste (nicht eingeloggte Benutzer) wird das Rollen-Array explizit geleert.
|
|
*/
|
|
$_SESSION['user_roles'] = [];
|
|
}
|
|
|
|
?>
|