Skip to main content
View as Markdown

Surveillance de l'activité

Sovrium enregistre chaque action significative dans l'application — création/mise à jour/suppression d'enregistrements, événements d'authentification et opérations administratives — dans un journal d'activité à l'échelle du système. Le journal est interrogeable via une API authentifiée avec filtrage et pagination, offrant aux opérateurs et aux auditeurs un endroit unique pour répondre à « qui a fait quoi, et quand ».

Il s'agit de la surface de lecture destinée à l'opérateur sur le magasin d'événements canonique du journal d'audit de la plateforme. Chaque entrée est immuable et survit aux lignes qu'elle référence lorsque la conformité l'exige (un événement account.deletion.purged survit à l'effacement de l'utilisateur qui l'a déclenché — voir GDPR & Confidentialité).

Ce qui est suivi

Catégorie Exemples
CRUD sur enregistrements create, update, delete, restore sur tout enregistrement de table.
Événements d'authentification Connexion, inscription, réinitialisation de mot de passe, révocation de session.
Actions administratives Création d'utilisateur, changements de rôle, bannissements, publications de schéma, suppressions forcées.
Événements système Migrations, planification et purge de suppression de compte.

Chaque entrée porte l'action, la table et l'identifiant d'enregistrement concernés (le cas échéant), un horodatage et l'utilisateur agissant (id, nom, e-mail). La référence à l'acteur est liée par clé étrangère avec ON DELETE SET NULL, de sorte qu'une entrée d'audit reste un enregistrement de conformité valide même après l'effacement du compte de l'acteur.

Interrogation du journal d'activité

L'API d'activité est protégée par administration. Les requêtes non authentifiées renvoient 401 ; les sessions non administrateur renvoient 403.

GET /api/activity?page=1&pageSize=20&table=orders&action=update
{
  "activities": [
    {
      "id": "act_123",
      "action": "update",
      "tableName": "orders",
      "recordId": 456,
      "createdAt": "2025-01-15T10:30:00Z",
      "user": { "id": "1", "name": "Alice", "email": "alice@example.com" }
    }
  ],
  "pagination": { "total": 150, "page": 1, "pageSize": 20, "totalPages": 8 }
}
Point de terminaison Description
GET /api/activity Liste paginée et filtrable des entrées d'activité.
GET /api/activity/:activityId Détail complet pour une seule entrée d'activité.

Paramètres de requête

Paramètre Type Description
page number Numéro de page (par défaut : 1).
pageSize number Entrées par page.
table string Filtre sur une seule table par nom.
action string Filtre par action (create, update, delete, restore, …).

Conservation

Les entrées d'activité sont conservées conformément à la politique de conservation de la plateforme. Les lignes sources supprimées en douceur vieillissent elles-mêmes selon l'horizon ECO_RETENTION_PURGE_DAYS (voir Écoconception), mais les entrées d'audit requises pour la conformité — notamment les enregistrements d'effacement — sont préservées indépendamment des lignes qu'elles décrivent.

Usage de conformité

La même forme renvoyée aux administrateurs est renvoyée aux auditeurs, de sorte que la documentation de revue SOC2 / GDPR reflète exactement ce que voient les opérateurs. Combiné au magasin d'événements canonique immuable, le journal d'activité fournit la « piste d'audit de l'effacement » requise lors de l'honneur d'une demande de droit à l'oubli : la suppression est elle-même consignée, avec la référence à l'acteur null-ifiée une fois le compte purgé.

Pages connexes