sourcetoad / logger
在整个应用程序中创建活动审计。
Requires
- php: ^8.2|^8.3
- ext-json: *
- illuminate/auth: ^11.0
- illuminate/config: ^11.0
- illuminate/database: ^11.0
- illuminate/support: ^11.0
- illuminate/translation: ^11.0
Requires (Dev)
- phpunit/phpunit: ^11.2
- squizlabs/php_codesniffer: ^3.10
README
此包允许您记录重要事件,包括谁查看哪些数据。包括以下内容
- 登录事件
- 注销事件
- 锁定事件
- 失败的登录尝试
- 密码更改
- 具有
Trackable
特性的模型的属性更改(除created_at
/updated_at
)。 - 检索事件(检测请求期间加载的模型,具有
Trackable
特性的模型) - 查看的键(从 API 请求中提取键以识别可以查看的内容)
这有助于回答以下问题
- 谁在何时访问了此账户的信息?
- 这个人何时更改了密码?
- 谁更改了此用户的资料?
- 负责这些更改的 IP 是什么?
此外,此插件非常小巧,安装难度比普通插件大。这是因为出于可能的法律原因,这些日志可能不允许被删除多年。这意味着存储方法必须高效,而其他可能专门从事审计/日志记录的包可能会使数据库信息膨胀。
Laravel
您正在阅读11.x的文档。
当前支持的数据库:mysql
您可以通过composer安装此包
composer require sourcetoad/logger
此包将使用Laravel 5.5+的自动发现功能来注册服务提供者。
配置
您可以通过以下方式发布配置来更改
php artisan vendor:publish --tag=logger
这将包含模型映射,下面将介绍。
设置
可变形实体
由于预计将创建大量记录,您必须创建整数映射到系统中模型的映射。以下是一个示例
use Sourcetoad\Logger\Enums\ModelMapping; 'morphs' => [ ModelMapping::USER => 'App\User' ];
这指向我们的App\User::class
到一个枚举(整数)。这意味着我们的数据库使用小的整数而不是大的完全限定命名空间。
建议创建一个枚举类来描述系统中所有模型。如果没有检测到整数映射,系统将错误地抛出/InvalidArgumentException
。
这强制用户为所有模型创建简写表示。为了减少数据库大小。如果没有找到数值形态,系统将失败。由于盲目覆盖和应用这些形态可能导致全局问题,它们将手动应用。这意味着您的应用程序中的形态保持不变。
Trackable 特性
对于可能包含您希望通知已访问/检索的信息的模型,您可以将Trackable特性添加到这些模型中。问题是,没有用户关联的记录毫无价值。然而,您可以访问没有外键或与用户模型相关联的外键的记录。这种跟踪使得审计相当无用。
use Sourcetoad\Logger\Traits\Trackable; class Model { use Trackable; }
因此,我们开发了自定义解析器的概念。必须为每个跟踪的实体实现它们,这些实体(如果被跟踪)必须在上述设置中的 morphs
表中。
自定义解析器
定时任务
由于负载增加,这些自定义解析器不会在项目输入时运行。这应该理论上被排队,但对于命令(定时任务)系统来说更容易实现。使用 Laravel 调度器来执行我们的命令。
$schedule->command('logger:audit-resolver') ->hourly() ->withoutOverlapping();
这将运行,处理200项更改和检索到的模型。它将确定与它们关联的用户。每个单独模型的函数应该很简单。
public function trackableUserResolver() { return $this->object->relation->user_id; }
如您所见,我们必须遍历所需的关系/属性,以便将当前模型与用户关联起来。如果没有匹配项,你可能不需要记录它。