greensight/laravel-auditing

此包已被放弃且不再维护。作者建议使用ensi/laravel-auditing包。

0.1.3 2021-08-27 19:02 UTC

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 的意见分歧分支

安装

  1. composer require greensight/laravel-auditing
  2. php artisan vendor:publish --provider="Greensight\LaravelAuditing\LaravelAuditingServiceProvider"
  3. 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() 方法返回相同的标识符。

此外,与原始包不同,在历史记录中保存的不仅是已更改的字段,还有模型在变更时的完整状态。

许可

MIT 许可证 (MIT).