Audit Trail

Le mode Audit Trail (HasAuditTrail) est la fonctionnalité phare d'AuditChain. Il enregistre chaque modification de vos models Eloquent dans une chaîne cryptographiquement liée et immutable — rendant toute falsification instantanément détectable.

En quoi il diffère du journal d'activité

Alors que le mode Journal d'activité enregistre les mêmes événements et données, l'Audit Trail ajoute une chaîne de hash SHA-256. Chaque entrée du journal d'audit contient :

  • Un hash calculé à partir des données d'audit
  • Un prev_hash la reliant à l'entrée précédente

Cela crée une chaîne inviolable où la modification d'une seule entrée invalide toutes les entrées qui suivent.

La chaîne de hash

Entry #1: hash = SHA256(data + genesis_seed)
Entry #2: hash = SHA256(data + hash_of_entry_1)
Entry #3: hash = SHA256(data + hash_of_entry_2)
...

Les données incluses dans le calcul du hash :

  • auditable_type et auditable_id
  • event (created, updated, deleted, etc.)
  • user_id, ip_address, user_agent
  • old_values et new_values
  • personal_data_accessed
  • timestamp
  • prev_hash

Note : batch_uuid et context sont intentionnellement exclus du calcul du hash. Ce sont des métadonnées opérationnelles — modifier le regroupement par lot ou le contexte ne doit pas invalider la chaîne.

Quand utiliser le mode Audit Trail

Utilisez HasAuditTrail lorsque vous avez besoin de :

  • Preuve de non-falsification — Prouver que les enregistrements n'ont pas été altérés
  • Documents financiers — Transactions, factures, paiements
  • Audits réglementaires — Historique d'audit vérifiable et ininterrompu
  • Conformité réglementaire — RGPD, NIS2, SOX, HIPAA

Utilisation

use GrayMatter\AuditChain\Concerns\HasAuditTrail;
use GrayMatter\AuditChain\Contracts\Auditable;

class Invoice extends Model implements Auditable
{
    use HasAuditTrail;
}

Vérification de la chaîne

Exécutez la commande de vérification pour contrôler l'intégrité de la chaîne :

php artisan audit:verify

Ou utilisez l'API programmatique :

use GrayMatter\AuditChain\Services\AuditChainService;

$result = app(AuditChainService::class)->verifyChain();
// ['valid' => true, 'checked' => 150, 'errors' => []]

Consultez Vérification de la chaîne pour plus de détails sur la vérification automatisée et les notifications.