greensight / laravel-auditing
Requires
- php: ^8.0
- illuminate/console: ^7.0|^8.0
- illuminate/database: ^7.0|^8.0
- illuminate/filesystem: ^7.0|^8.0
- illuminate/support: ^7.0|^8.0
- ramsey/uuid: ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- illuminate/contracts: ^8.0
- mockery/mockery: ^1.0
- orchestra/testbench: ^6.0
- php-parallel-lint/php-var-dump-check: ^0.5.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2021-10-05 09:29:14 UTC
README
已弃用,请使用 https://github.com/ensi-platform/laravel-auditing 代替
基于 owen-it/laravel-auditing 的意见分歧分支
安装
composer require greensight/laravel-auditing
php artisan vendor:publish --provider="Greensight\LaravelAuditing\LaravelAuditingServiceProvider"
- 在
config/app
中添加提供者类Greensight\LaravelAuditing\LaravelAuditingServiceProvider::class
使用
默认情况下,不会保存任何模型的变更历史。要为特定模型启用日志记录,需要添加其特例 SupportsAudit
和接口 Auditable
use Greensight\LaravelAuditing\Contracts\Auditable; use Greensight\LaravelAuditing\SupportsAudit; class Something extends Model implements Auditable { use SupportsAudit; }
如果我们从逻辑上修改子模型的属性,并希望在历史中将其视为父模型的一部分,则需要在更改数据之前设置根实体(即模型)。这通过 Transaction
门面或 \\Greensight\\LaravelAuditing\\Transactions\\ExtendedTransactionManager
管理器完成。
DB::transaction(function () { Transaction::setRootEntity($rootModel); $relatedModel->save(); });
要记录谁进行了更改(具体用户或例如控制台命令)同样需要在更改数据之前完成,但通过 Subject
门面或 \\Greensight\\LaravelAuditing\\Resolvers\\SubjectManager
注入。
Subject::attach($subject); // $subject - объект реализующий Greensight\LaravelAuditing\Contracts
在事务完成后,主体不会被解绑。可以手动调用 Subject::detach()
方法来解绑。
在处理 HTTP 请求时,可以在中间件中设置主体。在控制台命令和队列事件处理器中,可以在执行过程中重新分配。
主体可以是任何支持接口 \Greensight\LaravelAuditing\Contracts\Principal
的实体。如果主体是执行的任务(例如文件导入),则它可以在 getUserIdentifier()
方法中返回创建任务的用户的标识符,并将其名称作为返回值。
在用户模型中,getAuthIdentifier()
和 getUserIdentifier()
方法返回相同的标识符。
此外,与原始包不同,在历史记录中保存的不仅是已更改的字段,还有模型在变更时的完整状态。