Désactiver la journalisation

Les seeds de base de données, les imports en masse et les scripts de maintenance créent du bruit dans votre journal d'audit. AuditChain::withoutAudit() supprime toute journalisation d'audit au sein de son callback.

Utilisation

use GrayMatter\AuditChain\Facades\AuditChain;

AuditChain::withoutAudit(function () {
    // Aucun log d'audit créé pendant ce callback
    User::factory()->count(1000)->create();
});

Tous les événements Eloquent et les événements personnalisés sont silencieusement ignorés pendant l'exécution du callback.

Cas d'utilisation courants

Seeds de base de données

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        AuditChain::withoutAudit(function () {
            User::factory()->count(50)->create();
            Category::factory()->count(20)->create();
            Product::factory()->count(200)->create();
        });
    }
}

Imports en masse

AuditChain::withoutAudit(function () use ($rows) {
    foreach ($rows as $row) {
        Product::updateOrCreate(
            ['sku' => $row['sku']],
            ['price' => $row['price'], 'name' => $row['name']],
        );
    }
});

Scripts de maintenance

// Corriger une incohérence de données sans encombrer le journal d'audit
AuditChain::withoutAudit(function () {
    User::whereNull('timezone')->update(['timezone' => 'UTC']);
});

Valeurs de retour

withoutAudit() retourne ce que le callback retourne :

$users = AuditChain::withoutAudit(function () {
    return User::factory()->count(10)->create();
});
// $users est la collection créée

Imbrication

Les appels peuvent être imbriqués en toute sécurité. La journalisation reste désactivée jusqu'à ce que le callback le plus externe soit terminé :

AuditChain::withoutAudit(function () {
    User::create([...]); // pas de log d'audit

    AuditChain::withoutAudit(function () {
        Post::create([...]); // pas de log d'audit
    });

    Comment::create([...]); // toujours pas de log d'audit
});

Notes importantes

  • Les événements personnalisés sont aussi supprimés : $model->audit('shipped') à l'intérieur de withoutAudit() est un no-op.
  • Utilisez avec parcimonie : chaque opération supprimée est une lacune dans votre journal d'audit. Pour les models critiques en matière de conformité, demandez-vous si cette lacune est acceptable.
  • Envisagez le contexte à la place : si vous souhaitez conserver le journal d'audit mais marquer les entrées comme faisant partie d'un import, utilisez le contexte au lieu de supprimer entièrement la journalisation.