144 lines
3.9 KiB
PHP
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;
|
|
}
|
|
} |