【问题标题】:How to Log all web transactions (PHP/Laravel)如何记录所有 Web 事务 (PHP/Laravel)
【发布时间】:2023-03-19 01:16:01
【问题描述】:

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

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

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

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

提前致谢!

【问题讨论】:

    标签: php mysql laravel-5.2 audit


    【解决方案1】:

    记录器

    最简单快速的方法是使用 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,它对我的​​目的很有效。

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

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

    <?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');
        }
    }
    

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

    事件溯源

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

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

    【讨论】:

    • 我无法发布事件溯源的链接(声誉不足),但这里是:Laravel-Broadway。以下是该模式的总体描述:Microsoft Design Patterns
    • 谢谢@gaheinrichs。我会按照你说的试一试。
    • @gaheinrichs 除了链接之外,最好在答案中包含相关信息。否则,将立即考虑删除仅链接的答案。您在此处获得高质量答案的良好开端,因此请采取额外步骤并包括如何使用您推荐的方法。
    • @MichaelGaskill 感谢您的反馈。我添加了有关如何使用我提供的解决方案的更多信息。
    • @gaheinrichs 我喜欢你添加的内容,我给了它一个赞成票,因为它质量高且很有帮助。继续这样做,你会在这里做得很好。 :D
    猜你喜欢
    • 2019-06-18
    • 2016-07-12
    • 2023-02-22
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多