Some checks failed
CI / secret-scan (push) Successful in 8s
CI / static-tests (push) Successful in 28s
CI / static-tests (pull_request) Successful in 27s
CI / auto-merge (push) Has been skipped
CI / php-lint (push) Successful in 18s
CI / secret-scan (pull_request) Successful in 9s
CI / php-lint (pull_request) Successful in 18s
CI / auto-merge (pull_request) Failing after 4s
AdminController : base des pages back-office. guard(permission?) applique RG-6/RG-T02 (302 vers
/login si session absente/expiree/inactive) puis RG-T03 (403 si permission manquante), sinon renvoie
la GuardResult ; adminView() rend dans le shell admin en injectant identite + permissions + jeton CSRF.
Controller gagne un hook layoutName() (defaut inchange). DashboardController -> GET /admin/dashboard
(landing authentifie ; KPI reels = chunk stats). UserDirectory : nom + libelle de role pour la topbar.
Vues admin/{layout,dashboard,forbidden} : navigation conditionnee aux permissions, logout en POST CSRF,
sorties echappees (RG-T15), assets en chemins absolus. Premier cablage de SessionGuard sur une page.
127 tests (dont 403 garde, echappement XSS), PHPStan L6.
40 lines
1.2 KiB
PHP
40 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Auth;
|
|
|
|
use App\Core\DatabaseInterface;
|
|
|
|
/**
|
|
* Lecture des informations d'affichage d'un utilisateur (nom + libelle de role)
|
|
* pour l'entete du back-office. Separe d'Authorizer (qui ne traite que les
|
|
* permissions) ; depend de DatabaseInterface pour rester testable avec un double.
|
|
*/
|
|
final class UserDirectory
|
|
{
|
|
public function __construct(private readonly DatabaseInterface $db)
|
|
{
|
|
}
|
|
|
|
/**
|
|
* @return array{name: string, role_label: string}
|
|
*/
|
|
public function displayInfo(int $userId): array
|
|
{
|
|
$row = $this->db->fetch(
|
|
'SELECT u.first_name, u.last_name, r.label AS role_label '
|
|
. 'FROM user u JOIN role r ON r.id = u.role_id WHERE u.id = :id',
|
|
['id' => $userId],
|
|
);
|
|
|
|
$first = is_string($row['first_name'] ?? null) ? $row['first_name'] : '';
|
|
$last = is_string($row['last_name'] ?? null) ? $row['last_name'] : '';
|
|
$name = trim($first . ' ' . $last);
|
|
|
|
return [
|
|
'name' => $name !== '' ? $name : 'Utilisateur',
|
|
'role_label' => is_string($row['role_label'] ?? null) ? $row['role_label'] : '',
|
|
];
|
|
}
|
|
}
|