Suivi des lectures

Savoir qui a accédé aux données sensibles et quand est fondamental pour l'audit de sécurité et la réponse aux incidents. AuditChain peut journaliser les événements retrieved chaque fois qu'un model auditable est chargé depuis la base de données, vous offrant un journal d'accès complet. Cela répond également aux exigences de conformité telles que l'article 15 du RGPD (droit d'accès) et l'article 33 (notification de violation).

Activer le suivi des lectures

Le suivi des lectures est désactivé par défaut. Activez-le dans la configuration :

// config/audit-chain.php
'events' => [
    'log_reads' => true,
],

Une fois activé, chaque événement Eloquent retrieved sur les models auditables crée une entrée de log d'audit avec event=retrieved.

Ce qui est enregistré

Un log d'audit retrieved capture :

  • Le type et l'identifiant du model
  • L'utilisateur authentifié qui a déclenché la requête
  • L'adresse IP et le user agent
  • L'horodatage
  • Tout batch UUID et contexte actifs

Les colonnes old_values et new_values sont vides pour les événements retrieved — seul le fait que l'enregistrement a été consulté est journalisé.

Suivi des données personnelles

Si le model possède des champs de données personnelles annotés, la colonne personal_data_accessed enregistre quels champs personnels étaient présents sur le model récupéré. C'est le point de données clé pour les évaluations d'impact en cas de violation du RGPD.

$user = User::find(42);
// Audit log: event=retrieved, personal_data_accessed=["email", "name"]

Avertissement sur le volume

Le suivi des lectures est très verbeux. Un seul chargement de page qui interroge 50 utilisateurs génère 50 entrées de log d'audit. Évaluez l'impact avant d'activer cette fonctionnalité :

  • Stockage : la croissance de la table de logs d'audit augmentera significativement
  • Performance : chaque récupération déclenche une insertion (ou un job en file d'attente)
  • Rétention : utilisez audit:prune de manière agressive ou définissez une période de rétention courte pour les événements retrieved

Utilisation sélective

Si vous n'avez besoin du suivi des lectures que sur des models spécifiques, laissez log_reads à false globalement et surchargez getAuditableEvents() sur les models qui en ont besoin :

class Patient extends Model implements Auditable
{
    use HasAuditTrail;

    public function getAuditableEvents(): array
    {
        return ['created', 'updated', 'deleted', 'retrieved'];
    }
}

De cette manière, seuls les models Patient journalisent les événements de récupération tandis que les autres models se comportent normalement.

Quand l'utiliser

  • Applications de santé — suivi de qui a consulté les dossiers patients
  • Services financiers — journalisation des accès aux données de compte
  • Réponse aux violations RGPD — détermination des données personnelles exposées
  • Investigations internes — audit de qui a consulté des enregistrements sensibles