FEAT: Journal d'audit — couverture complète + détails OldValue/NewValue dans l'UI #92

Closed
opened 2026-08-12 10:30:07 +02:00 by nonobis · 1 comment
Owner

Contexte

L'utilisateur demande « le maximum d'informations dans le journal d'audit ». Aujourd'hui la couverture est partielle et l'UI masque les détails.

État actuel (constats code, 12/08/2026)

  • Entité AuditLog : Action, ResourceType, ResourceId, OldValue, NewValue, IpAddress, Timestamp, UserId — les champs de détail existent ✅.
  • Couverture partielle : seuls Group.* (Create/Update/Delete/UserAdded/UserRemoved), Agent.Registered, et les actions User via UserRepository.AddAuditLogAsync sont journalisés. Absents : Site.Created/Updated/Deleted, Camera.Created/Updated/Deleted, Agent.Deleted, User.Deleted, settings, logins/échecs 2FA, etc.
  • AuditLogsPage.razor : colonnes Date/Utilisateur/Action/Type/Ressource(8 premiers chars)/IP. Ni OldValue, ni NewValue, ni filtres par utilisateur/date.

À faire

  1. Back-end : journaliser systématiquement les actions majeures (sites, caméras, agents, users — suppression incluse, settings, login/logout, 2FA, changements de rôles avec old→new). Utiliser OldValue/NewValue (JSON compact) à chaque fois qu'une valeur change.
  2. UI :
    • colonne « Détails » avec diff lisible OldValue → NewValue (ou modal de détail complet, ID ressource entier) ;
    • filtres : par utilisateur (autocomplete), par plage de dates, recherche texte libre ;
    • bouton export CSV (optionnel).
  3. Afficher le nom de ressource (ex. nom du site/caméra) plutôt que l'ID tronqué quand c'est possible.

Critères d'acceptation

  • Toute action admin destructive/modificative apparaît dans le journal avec les valeurs avant/après.
  • L'UI permet de retrouver une entrée par utilisateur, date et texte.
  • Le journal reste append-only.

Fichiers concernés

  • src/Heimdall.Application/Audit/
  • src/Heimdall.Application/**/Commands/* (ajout d'audit)
  • src/Heimdall.Infrastructure/Persistence/UserRepository.cs
  • src/Heimdall.Web/Components/Pages/AuditLogsPage.razor
  • src/Heimdall.Web/Controllers/AuditLogsController.cs


Maquette

Maquette

Description

Écran Journal d'audit enrichi : colonne « Détails (Avant → Après) » avec diff lisible (ancienne valeur barrée en rouge → nouvelle en vert), noms de ressourc


Maquette

Maquette

## Contexte L'utilisateur demande « le maximum d'informations dans le journal d'audit ». Aujourd'hui la couverture est partielle et l'UI masque les détails. ## État actuel (constats code, 12/08/2026) - Entité `AuditLog` : `Action`, `ResourceType`, `ResourceId`, `OldValue`, `NewValue`, `IpAddress`, `Timestamp`, `UserId` — les champs de détail existent ✅. - Couverture **partielle** : seuls `Group.*` (Create/Update/Delete/UserAdded/UserRemoved), `Agent.Registered`, et les actions User via `UserRepository.AddAuditLogAsync` sont journalisés. **Absents** : Site.Created/Updated/Deleted, Camera.Created/Updated/Deleted, Agent.Deleted, User.Deleted, settings, logins/échecs 2FA, etc. - `AuditLogsPage.razor` : colonnes Date/Utilisateur/Action/Type/Ressource(8 premiers chars)/IP. **Ni OldValue, ni NewValue, ni filtres par utilisateur/date.** ## À faire 1. **Back-end** : journaliser systématiquement les actions majeures (sites, caméras, agents, users — suppression incluse, settings, login/logout, 2FA, changements de rôles avec old→new). Utiliser `OldValue`/`NewValue` (JSON compact) à chaque fois qu'une valeur change. 2. **UI** : - colonne « Détails » avec diff lisible OldValue → NewValue (ou modal de détail complet, ID ressource entier) ; - filtres : par utilisateur (autocomplete), par plage de dates, recherche texte libre ; - bouton export CSV (optionnel). 3. Afficher le nom de ressource (ex. nom du site/caméra) plutôt que l'ID tronqué quand c'est possible. ## Critères d'acceptation - Toute action admin destructive/modificative apparaît dans le journal avec les valeurs avant/après. - L'UI permet de retrouver une entrée par utilisateur, date et texte. - Le journal reste append-only. ## Fichiers concernés - `src/Heimdall.Application/Audit/` - `src/Heimdall.Application/**/Commands/*` (ajout d'audit) - `src/Heimdall.Infrastructure/Persistence/UserRepository.cs` - `src/Heimdall.Web/Components/Pages/AuditLogsPage.razor` - `src/Heimdall.Web/Controllers/AuditLogsController.cs` --- --- ## Maquette - **Lien Penpot** : [nonobis-design-system › page admin](https://penpot.tordais.cc/?page=127dfd1c-12b5-80f7-8008-79c8ea073ccc) ![Maquette](https://forgejo.tordais.cc/attachments/6cfd7f37-5da3-4a39-8308-c0c7dd8f9107) - [Détails / composants MudBlazor (README)](https://forgejo.tordais.cc/attachments/d0b3d799-f559-4e50-8c7e-b645b4e998c9) - Statut : maquette appliquée dans Penpot ✓ ## Description Écran Journal d'audit enrichi : colonne « Détails (Avant → Après) » avec diff lisible (ancienne valeur barrée en rouge → nouvelle en vert), noms de ressourc --- ## Maquette - **Lien Penpot** : [nonobis-design-system › page admin](https://penpot.tordais.cc/?page=127dfd1c-12b5-80f7-8008-79c8ea073ccc) ![Maquette](https://forgejo.tordais.cc/attachments/6cfd7f37-5da3-4a39-8308-c0c7dd8f9107) - [Détails / composants MudBlazor (README)](https://forgejo.tordais.cc/attachments/d0b3d799-f559-4e50-8c7e-b645b4e998c9) - Statut : maquette appliquée dans Penpot ✓
Author
Owner

Maquette the-designer intégrée (14/08/2026) :

Maquette the-designer intégrée (14/08/2026) : - Aperçu (PNG) : https://forgejo.tordais.cc/attachments/6cfd7f37-5da3-4a39-8308-c0c7dd8f9107 - Détails / composants MudBlazor (README) : https://forgejo.tordais.cc/attachments/d0b3d799-f559-4e50-8c7e-b645b4e998c9 - Statut : application Penpot différée (plugin MCP non connecté) — maquette locale consultable
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#92
No description provided.