sourcetoad/logger

在整个应用程序中创建活动审计。

v5.0.1 2024-07-18 12:25 UTC

README

此包允许您记录重要事件,包括谁查看哪些数据。包括以下内容

  • 登录事件
  • 注销事件
  • 锁定事件
  • 失败的登录尝试
  • 密码更改
  • 具有 Trackable 特性的模型的属性更改(除 created_at/updated_at)。
  • 检索事件(检测请求期间加载的模型,具有 Trackable 特性的模型)
  • 查看的键(从 API 请求中提取键以识别可以查看的内容)

这有助于回答以下问题

  • 谁在何时访问了此账户的信息?
  • 这个人何时更改了密码?
  • 谁更改了此用户的资料?
  • 负责这些更改的 IP 是什么?

此外,此插件非常小巧,安装难度比普通插件大。这是因为出于可能的法律原因,这些日志可能不允许被删除多年。这意味着存储方法必须高效,而其他可能专门从事审计/日志记录的包可能会使数据库信息膨胀。

Laravel

您正在阅读11.x的文档。

  • 如果您使用Laravel 9或10,请参阅4.x的文档。
  • 如果您使用Laravel 6、7或8,请参阅3.x的文档。
  • 如果您使用Laravel 5或更低版本,请参阅1.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;
}

如您所见,我们必须遍历所需的关系/属性,以便将当前模型与用户关联起来。如果没有匹配项,你可能不需要记录它。