sessionGuard()->check(); if (!$result->authenticated || $result->userId === null || $result->roleId === null) { return Response::make('', 302, ['Location' => '/login']); } if ($permission !== null && !$this->authorizer()->can($result->roleId, $permission)) { return $this->adminView('admin/forbidden', ['title' => 'Acces refuse', 'activeNav' => ''], $result, 403); } return $result; } /** * Rend une vue dans le shell admin en injectant le contexte commun * (nom/role de l'utilisateur, permissions pour la navigation, jeton CSRF). * Les cles passees dans $data ont priorite (ex. activeNav). * * @param array $data */ protected function adminView(string $name, array $data, GuardResult $guard, int $status = 200): Response { $userId = $guard->userId ?? 0; $roleId = $guard->roleId ?? 0; $info = $this->userDirectory()->displayInfo($userId); $context = [ 'currentUserName' => $info['name'], 'currentUserRole' => $info['role_label'], 'permissions' => $this->authorizer()->permissionsFor($roleId), 'csrfToken' => Csrf::token($this->sessionManager()), 'activeNav' => '', ]; return $this->view($name, $data + $context, $status); } protected function userDirectory(): UserDirectory { return new UserDirectory($this->database); } }