ensi / laravel-auditing
Installs: 15 238
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 3
Forks: 3
Open Issues: 2
Requires
- php: ^8.0
- illuminate/console: ^8.0|^9.0|^10.0
- illuminate/database: ^8.0|^9.0|^10.0
- illuminate/filesystem: ^8.0|^9.0|^10.0
- illuminate/support: ^8.0|^9.0|^10.0
- ramsey/uuid: ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.2
- illuminate/contracts: ^8.0|^9.0|^10.0
- mockery/mockery: ^1.0
- orchestra/testbench: ^6.0|^7.0|^8.0
- php-parallel-lint/php-var-dump-check: ^0.5.0
- phpunit/phpunit: ^9.0 || ^10.0
README
Opiniated fork of owen-it/laravel-auditing
Установка
composer require ensi/laravel-auditing
php artisan vendor:publish --provider="Ensi\LaravelAuditing\LaravelAuditingServiceProvider"
- Добавьте в
config/app
класс провайдераEnsi\LaravelAuditing\LaravelAuditingServiceProvider::class
Использование
По-умолчанию никакая история изменения для моделей не сохраняется.
Чтобы включить логирование для конкретной модели надо добавить ей трейт SupportsAudit
и интерфейс Auditable
use Ensi\LaravelAuditing\Contracts\Auditable; use Ensi\LaravelAuditing\SupportsAudit; class Something extends Model implements Auditable { use SupportsAudit; }
В случае, если мы меняем данные дочерних с логической точки зрения моделей и хотим чтобы в истории это изменение проходило под родительской моделью, необходимо в транзакции до изменения данных задать корневую сущность (т.е модель).
Делается это через фасад Transaction
или менеджер \\Ensi\\LaravelAuditing\\Transactions\\ExtendedTransactionManager
DB::transaction(function () { Transaction::setRootEntity($rootModel); $relatedModel->save(); });
Для добавления в историю данных о том кто произвел изменения (конкретный пользователь, или, например, консольная команда) опять же нужно это сделать до изменения данных, но уже через фасад Subject
или инъекцию \\Ensi\\LaravelAuditing\\Resolvers\\SubjectManager
Subject::attach($subject); // $subject - объект реализующий Ensi\LaravelAuditing\Contracts
Субъект не отвязывается после завершения транзакции.
Его можно отвязать вручную вызовом метода Subject::detach()
.
При обработке http запросов, можно задавать субъекта в middleware. В консольных командах и обработчиках очереди событий переназначать в процессе выполнения.
Субъектом может являться любая сущность, поддерживающая интерфейс \Ensi\LaravelAuditing\Contracts\Principal
.
Если субъектом является выполняемое задание, например, импорт из файла, то оно может возвращать идентификатор
пользователя, создавшего задание в методе getUserIdentifier()
, а в качестве наименования возвращать имя
импортируемого файла.
В модели пользователя методы getAuthIdentifier()
и getUserIdentifier()
возвращают один и тот же идентификатор.
Также в отличии от исходного пакета в истории сохраняются не только измененные поля, но и полное состояние объекта модели на момент изменения.
Contributing
Testing
- composer install
- npm i
- composer test