2016-06-18 5 views
0

は、私はPHP/MySQLで1つのセキュアなアプリケーションを開発(Laravel 5.2フレームワークを使用)、以下の私の要件(PHP/Laravel)

  1. でいます私はそのすべてのトランザクションをログに記録する必要があります例えば、誰がログインしたのか、どのような操作をしたのかなど、アプリケーションを実行しています。もし彼が開いた報告書と、彼が見たデータと彼が見た記録は何ですか?

  2. これは、監査の目的のために基本的であるので、私は、需要に基づき

をDBにデータを格納し、監査チームに提供することができすべき既存のプラグイン(複数可)がある場合は私に知らせてくださいているだろうこの要件をサポートするか、これを構築するための最良の方法を提案しますか?

ありがとうございます!

答えて

3

ロガー

最も簡単かつ迅速なアプローチは、箱から出してLaravelが提供するロガーを使用することです。

あなたは、このようなコードの行を追加して、ユーザーを追跡することができます。$ idは

$user = Auth::user(); 

それとも、それはあなたの全体で再利用するための静的メソッドを作成して乾燥させることです

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

をアプリケーション:

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

あなたのコード内の余分な何もせずに自分のエンティティに変更追跡できるようになります。これは、私はエンティティにそれを設定する方法の一例です。

イベントソーシング

イベントソーシングは、アプリケーションの複雑さの多くを紹介しますが、それは問題の多くを解決します。このパターンを実装することで、ユーザがシステムで何をしているのかを記録するだけでなく、時間の経過と共に各エンティティを追跡することができます。これは、発生したイベントを格納し、すべてのイベントを実行してエンティティを再作成することによってのみ実現されます。これはパフォーマンスに影響しますが、このパターンをマテリアライズド・ビュー・パターンと組み合わせることで解決できます。これは最終的な一貫性をあなたのアプリに加えることができます。

そうでない場合は、あなた(とあなたのチームは)複雑

+0

の痛みを感じることが、このパターンを使用しての価値が本当に存在していることを確認してください私は、イベントソーシング(足りない評判)のためのリンクを投稿することができませんでしたしかし、ここはそれです:[Laravel-Broadway](https://github.com/nWidart/Laravel-broadway)。パターンの全体的な説明は次のとおりです。[Microsoft Design Patterns](https://msdn.microsoft.com/en-us/library/dn589792.aspx) – gaheinrichs

+0

ありがとう@gaheinrichs。私はあなたが言ったように試してみます。 – Nagesh

+1

@gaheinrichsリンクに加えて、回答に関連する情報を含めるとよいでしょう。それ以外の場合、リンクのみの回答はすぐに削除対象とみなされます。ここでは高品質の回答を非常にうまく開始しているので、余計な手順を踏んで、推奨する方法を使用する方法を説明してください。 –