Журнали аудиту корисні лише тоді, коли ви впевнені у їхній достовірності. Записи у звичайній таблиці бази даних легко підробити або непомітно видалити — і стандартні інструменти Laravel цього не зафіксують.
Laravel Chronicle від Vasileios Ntoufoudis пропонує інший підхід. Замість простого логування, пакет будує криптографічний ланцюжок хешів за допомогою SHA-256. Кожен новий запис включає хеш попереднього, що робить увесь реєстр взаємопов’язаним. Якщо змінити або видалити будь-який елемент, ланцюжок розірветься, і Chronicle зафіксує порушення цілісності.
# Як почати
composer require laravel-chronicle/core
php artisan chronicle:install
# Запис у реєстр
Для створення нового запису використовуйте метод record() фасаду Chronicle:
use Chronicle\Facades\Chronicle;
Chronicle::record()
->actor($reviewer)
->action('application.approved')
->subject($application)
->metadata(['from' => 'pending', 'to' => 'approved'])
->tags(['applications', 'workflow'])
->commit();
Кожен запис повинен мати автора (actor), дію (action) та об'єкт (subject). Поля metadata та tags дозволяють додати необхідний контекст для вашої бізнес-логіки.
# Пошук записів
Chronicle пропонує готові scopes для найпоширеніших запитів — за автором, об'єктом, дією чи тегом:
use Chronicle\Entry\Entry;
Entry::forActor($reviewer);
Entry::forSubject($application);
Entry::action('application.approved');
Entry::withTag('workflow');
Для великих реєстрів Chronicle підтримує стрімінг за допомогою database cursor. Це дозволяє зберігати стабільне споживання пам'яті незалежно від кількості даних. Метод cursorPaginateLedger() забезпечує зручну пагінацію без повного завантаження таблиці.
# Контроль цілісності даних
Окрім ланцюжка хешів, Chronicle дозволяє фіксувати стан реєстру в певний момент часу за допомогою підписаних чекпоінтів. Такий чекпоїнт містить актуальну «голову» ланцюжка, алгоритм шифрування, криптографічний підпис та часову мітку. Якщо виникне сумнів у достовірності логів, ви матимете верифікований знімок для підтвердження.
Якщо дані аудиту потрібно передати зовнішньому аудитору або зберегти копію поза межами системи, Chronicle може експортувати реєстр як підписаний набір даних:
php artisan chronicle:export
Під час експорту створюються три файли: entries.ndjson, manifest.json та signature.json. Їх можна перевірити незалежно за допомогою Artisan-команди:
php artisan chronicle:verify-export
Chronicle ідеально підходить для проєктів, де критично важлива надійність аудит-трейлів: фінансових операцій, систем безпеки або комплаєнс-процесів. Вихідний код та повна документація доступні на GitHub.