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

Nag*_*esh 0 php mysql audit laravel-5

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

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

  2. 这基本上是出于审计目的,因此我应该能够将数据存储在数据库中并根据需要提供给审计团队

请告诉我是否有任何现有插件可以支持此要求或建议我构建此插件的最佳方法?

提前致谢!

gah*_*chs 5

记录器

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

您可以通过添加类似于以下的代码行来跟踪用户:

Log::info('Showing user profile for user: '.$id);
Run Code Online (Sandbox Code Playgroud)

$id 是哪里

$user = Auth::user();
Run Code Online (Sandbox Code Playgroud)

或者为了使其干燥,创建一个静态方法以在您的应用程序中重用:

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

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

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

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

事件日志/修订

如果您还想跟踪系统中的实体,您可能还需要考虑事件日志之类的东西:

我过去使用过这个库: https: //github.com/VentureCraft/revisionable,它非常适合我的目的。

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

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

<?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');
    }
}
Run Code Online (Sandbox Code Playgroud)

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

事件溯源

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

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