feat : audit log (table + writer + listener + API + admin UI + timeline) #9

Merged
matthieu merged 38 commits from feat/audit-log into develop 2026-05-13 08:29:31 +00:00
2 changed files with 26 additions and 13 deletions
Showing only changes of commit e2fbf51e19 - Show all commits

View File

@@ -39,20 +39,29 @@ declare(strict_types=1);
return [ return [
// Section "Administration" : regroupe toutes les pages de configuration // Section "Administration" : regroupe toutes les pages de configuration
// applicative (RBAC, users, sites, audit log). Gate implicite : si l'user // applicative (RBAC, users, sites, audit log).
// n'a aucune des permissions item, la section se vide et disparait. //
// Pour imposer un gate explicite (ex: "seuls les membres du groupe support // CONVENTION : "etre admin" = detenir au moins une permission admin-scoped.
// voient l'administration"), ajouter ici : 'permission' => 'core.admin.access'. // En pratique, le groupe `core.*` represente l'administration applicative
// (users, roles, audit_log) ; les autres permissions admin-scoped proviennent
// des modules qui exposent leur propre page d'admin dans cette section
// (ex: `sites.view`). Un user qui n'a AUCUNE de ces permissions n'a pas
// acces a l'administration.
//
// Gate implicite : tous les items de cette section declarent une `permission`.
// Sans aucune permission correspondante, tous les items sont filtres, la
// section devient vide et est automatiquement masquee par SidebarProvider
// (cf. la boucle de filtrage : section vide => `continue`). Inutile donc
// d'ajouter un gate explicite au niveau section tant que chaque item porte
// sa propre permission.
//
// Pour imposer un gate explicite supplementaire (ex: "seuls les membres du
// groupe support voient l'administration, meme s'ils ont des permissions
// individuelles"), ajouter : 'permission' => 'core.admin.access'.
[ [
'label' => 'sidebar.administration.section', 'label' => 'sidebar.administration.section',
'icon' => 'mdi:cog-outline', 'icon' => 'mdi:cog-outline',
'items' => [ 'items' => [
[
'label' => 'sidebar.general.dashboard',
'to' => '/',
'icon' => 'mdi:view-dashboard-outline',
'module' => 'core',
],
[ [
'label' => 'sidebar.core.roles', 'label' => 'sidebar.core.roles',
'to' => '/admin/roles', 'to' => '/admin/roles',
@@ -102,6 +111,12 @@ return [
'label' => 'sidebar.account.section', 'label' => 'sidebar.account.section',
'icon' => 'mdi:account-circle-outline', 'icon' => 'mdi:account-circle-outline',
'items' => [ 'items' => [
[
'label' => 'sidebar.account.dashboard',
'to' => '/',
'icon' => 'mdi:view-dashboard-outline',
'module' => 'core',
],
[ [
'label' => 'sidebar.account.logout', 'label' => 'sidebar.account.logout',
'to' => '/logout', 'to' => '/logout',

View File

@@ -18,11 +18,9 @@
}, },
"account": { "account": {
"section": "Mon compte", "section": "Mon compte",
"dashboard": "Tableau de bord",
"logout": "Déconnexion" "logout": "Déconnexion"
}, },
"general": {
"dashboard": "Tableau de bord"
},
"commercial": { "commercial": {
"section": "Commercial", "section": "Commercial",
"suppliers": "Répertoire fournisseurs" "suppliers": "Répertoire fournisseurs"