38 lines
No EOL
1.1 KiB
PHP
38 lines
No EOL
1.1 KiB
PHP
<?php
|
|
// DATEI: ./auth.php (liegt ganz oben im Root)
|
|
|
|
if (session_status() === PHP_SESSION_NONE) {
|
|
// Session für die gesamte Domain ("/") gültig machen
|
|
session_set_cookie_params([
|
|
'path' => '/',
|
|
'httponly' => true,
|
|
'samesite' => 'Lax' // Lax erlaubt den Wechsel zwischen /home und /test
|
|
]);
|
|
session_start();
|
|
}
|
|
|
|
// 1. Ist der User eingeloggt?
|
|
if (!isset($_SESSION['user_email'])) {
|
|
header('Location: /');
|
|
exit();
|
|
}
|
|
|
|
// 2. Browser-Check gegen Session Hijacking
|
|
if (!isset($_SESSION['user_agent'])) {
|
|
$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
|
|
} elseif ($_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT']) {
|
|
session_destroy();
|
|
header('Location: /');
|
|
exit();
|
|
}
|
|
|
|
// 3. Rechte-Check (Admins dürfen immer rein)
|
|
$isAdmin = isset($_SESSION['is_admin']) && $_SESSION['is_admin'] === true;
|
|
$hasProjectAccess = isset($current_project) && isset($_SESSION['user_projects']) && in_array($current_project, $_SESSION['user_projects']);
|
|
|
|
if (!$isAdmin && !$hasProjectAccess) {
|
|
// Kein Admin und kein spezifischer Projekt-Zugriff
|
|
header('Location: /');
|
|
exit();
|
|
}
|
|
?>
|