如何记录所有网络交易 (PHP/Laravel)

How to Log all web transactions (PHP/Laravel)

我正在 PHP/MySQl 中开发一个安全应用程序(使用 Laravel 5.2 框架),以下是我的要求

  1. 我需要记录应用程序发生的所有事务,例如谁登录了,他做了什么操作。如果他打开任何报告,他打开了什么报告,他看到了什么数据,他看到的那些记录是什么?

  2. 这基本上是为了审计目的,所以我应该能够将数据存储在数据库中并按需提供给审计团队

请让我知道是否有任何现有插件可以支持此要求或建议我构建此功能的最佳方法?

提前致谢!

记录器

最简单快捷的方法是使用 Laravel 提供的开箱即用的记录器。

您可以通过添加一行类似这样的代码来跟踪用户:

Log::info('Showing user profile for user: '.$id);

$id 在哪里

$user = Auth::user();

或者干脆创建一个静态方法以在您的应用程序中重用:

public static function trackUser($message){
  $user = Auth::user();
  Log::info('Showing user profile for user: '.$user->id);
}

根据需要扩展它以添加更多数据。

有关 Laravel 记录器的更多信息,请访问:

https://laravel.com/docs/5.2/errors#logging

事件日志/修订

如果您还想跟踪系统中的实体,您可能还想考虑类似事件日志的内容:

我过去使用过这个库:https://github.com/VentureCraft/revisionable,它对我的​​目的很有效。

每次修改、创建或删除实体时,它都会在修订 table 中插入一条记录,其中包含先前值和新值的序列化值。

您将需要设置您的实体。这是我如何在实体上设置它的示例:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Sofa\Revisionable\Laravel\RevisionableTrait;
use Sofa\Revisionable\Revisionable;

class Invoice extends Model implements Revisionable {
    use RevisionableTrait;

    protected $table = 'invoices';
    protected $fillable = ['po_id', 'file_name', 'charges', 'customer', 'company', 'notes', 'tax', 'created_by'];
    protected $revisionPresenter = 'App\Presenters\InvoicePresenter';

    public function po()
    {
        return $this->belongsTo('App\PO');
    }

    public function transactions()
    {
        return $this->hasMany('App\Transaction');
    }
}

之后,您将能够跟踪实体上的更改,而无需在代码中执行任何额外操作。

事件溯源

事件溯源会给您的应用程序带来很多复杂性,但它会解决很多问题。通过实施此模式,您不仅可以记录用户在您的系统中所做的事情,还可以随着时间的推移跟踪每个实体。这是通过仅在事件发生时存储事件并通过 运行 所有事件重新创建实体来实现的。这会影响性能,但可以通过将此模式与物化视图模式相结合来解决。这可以为您的应用程序添加最终一致性。

请确保使用此模式确实有价值,否则您(和您的团队)将感受到复杂性带来的痛苦