144 lines
3.9 KiB
PHP

<?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;
}
}