projet par cursor

This commit is contained in:
LAINEY Grégory committed 2026-09-29 10:45:14 +02:00
1 parent 236f75ecdd
commit b785db1b84
47 files changed
+3902

No files matched your search

+135
View File
@@ -0,0 +1,135 @@
<?php
declare(strict_types=1);
final class Auth
{
private const CLE_UTILISATEUR = "utilisateur_id";
public function __construct(
private readonly UtilisateurService $utilisateurService
)
{
}
public function demarrerSession(): void
{
if (session_status() === PHP_SESSION_ACTIVE)
{
return;
}
$duree = Config::get("sessionLifetime", 86400);
session_set_cookie_params([
"lifetime" => $duree,
"path" => "/",
"httponly" => true,
"samesite" => "Lax",
"secure" => false
]);
session_start();
}
public function connecter(array $utilisateur): void
{
session_regenerate_id(true);
$_SESSION[self::CLE_UTILISATEUR] = $utilisateur["id"];
}
public function deconnecter(): void
{
$_SESSION = [];
if (ini_get("session.use_cookies"))
{
$params = session_get_cookie_params();
setcookie(
session_name(),
"",
time() - 42000,
$params["path"],
$params["domain"] ?? "",
(bool) $params["secure"],
(bool) $params["httponly"]
);
}
session_destroy();
}
public function estConnecte(): bool
{
return $this->utilisateurCourant() !== null;
}
public function utilisateurCourant(): ?array
{
$id = $_SESSION[self::CLE_UTILISATEUR] ?? null;
if (!is_string($id) || $id === "")
{
return null;
}
$utilisateur = $this->utilisateurService->trouverParId($id);
if ($utilisateur === null || !($utilisateur["actif"] ?? false))
{
return null;
}
return $utilisateur;
}
public function exigerConnexion(): array
{
$utilisateur = $this->utilisateurCourant();
if ($utilisateur === null)
{
Flash::definir("warning", "Veuillez vous connecter pour continuer.");
Helpers::rediriger("/connexion");
}
return $utilisateur;
}
public function exigerAdmin(): array
{
$utilisateur = $this->exigerConnexion();
if (($utilisateur["role"] ?? "") !== "admin")
{
Flash::definir("danger", "Accès réservé aux administrateurs.");
Helpers::rediriger("/");
}
return $utilisateur;
}
public function tenterConnexion(string $identifiant, string $motDePasse): bool
{
$utilisateur = $this->utilisateurService->trouverParIdentifiant($identifiant);
if ($utilisateur === null)
{
return false;
}
if (!($utilisateur["actif"] ?? false))
{
return false;
}
if (!password_verify($motDePasse, $utilisateur["motDePasseHash"]))
{
return false;
}
$this->connecter($utilisateur);
return true;
}
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.