<?php require_once 'config.php'; class Auth { public static function check() { return isset($_SESSION['user_id']); } public static function login($username, $password) { $config = Config::load(); $users = $config['users']; foreach ($users as $user) { if ($user['id'] === $username && password_verify($password, $user['password'])) { $_SESSION['user_id'] = $user['id']; return true; } } return false; } public static function logout() { unset($_SESSION['user_id']); session_destroy(); } public static function verifyCurrentPassword($password) { $config = Config::load(); $userId = $_SESSION['user_id']; foreach ($config['users'] as $user) { if ($user['id'] === $userId) { return password_verify($password, $user['password']); } } return false; } /** * Vérifie si l'utilisateur actuel est l'administrateur principal * (premier utilisateur dans la liste) */ public static function isAdmin() { if (!self::check()) { return false; } $config = Config::load(); $firstUser = reset($config['users']); return $_SESSION['user_id'] === $firstUser['id']; } /** * Vérifie si l'utilisateur a le rôle "admin" */ public static function hasAdminRole() { if (!self::check()) { return false; } $config = Config::load(); $userId = $_SESSION['user_id']; foreach ($config['users'] as $user) { if ($user['id'] === $userId) { return isset($user['role']) && $user['role'] === 'admin'; } } return false; } /** * Vérifie si l'utilisateur actuel a accès à un roman */ public static function canAccessStory($storyId) { if (!self::check()) { return false; } $userId = $_SESSION['user_id']; $config = Config::load(); // L'administrateur principal a accès à tous les romans if ($userId === reset($config['users'])['id']) { return true; } // Vérifier l'accès dans les paramètres du roman $story = Stories::get($storyId); if (!$story) { return false; } // Si aucune restriction d'accès n'est définie, tous les utilisateurs ont accès if (!isset($story['access']) || empty($story['access'])) { return true; } // Sinon, vérifier si l'utilisateur est dans la liste d'accès return in_array($userId, $story['access']); } /** * Récupère le rôle de l'utilisateur actuel */ public static function getCurrentUserRole() { if (!self::check()) { return null; } $config = Config::load(); $userId = $_SESSION['user_id']; foreach ($config['users'] as $user) { if ($user['id'] === $userId) { return $user['role'] ?? 'editor'; } } return 'editor'; } /** * Récupère la liste des utilisateurs (sauf l'utilisateur courant) */ public static function getAllUsers($excludeCurrentUser = true) { $config = Config::load(); $users = []; foreach ($config['users'] as $user) { if (!$excludeCurrentUser || $user['id'] !== ($_SESSION['user_id'] ?? null)) { $users[] = [ 'id' => $user['id'], 'role' => $user['role'] ?? 'editor', 'isAdmin' => $user === reset($config['users']) ]; } } return $users; } }