我開發的PHP/MySQL的(使用Laravel 5.2框架),並在下面一個安全的應用程序是我的要求如何記錄所有的網絡交易(PHP/Laravel)
我需要記錄所有的交易是正在發生的應用程序,例如登錄誰說,他做了什麼操作。如果他打開任何報告,他會打開什麼報告,看到了哪些數據以及他看到的記錄是什麼?
這基本上是對審計的目的,所以我應該能夠存儲在數據庫的數據,並提供給審計組需求的基礎上
請讓我知道,如果有任何現有的插件(一個或多個),這將支持這個要求還是建議我建立這個最好的方法?
在此先感謝!
我開發的PHP/MySQL的(使用Laravel 5.2框架),並在下面一個安全的應用程序是我的要求如何記錄所有的網絡交易(PHP/Laravel)
我需要記錄所有的交易是正在發生的應用程序,例如登錄誰說,他做了什麼操作。如果他打開任何報告,他會打開什麼報告,看到了哪些數據以及他看到的記錄是什麼?
這基本上是對審計的目的,所以我應該能夠存儲在數據庫的數據,並提供給審計組需求的基礎上
請讓我知道,如果有任何現有的插件(一個或多個),這將支持這個要求還是建議我建立這個最好的方法?
在此先感謝!
記錄儀
最簡單和快速的方法是通過使用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](https://github.com/nWidart/Laravel-broadway)。以下是該模式的總體說明:[Microsoft Design Patterns](https://msdn.microsoft.com/zh-cn/library/dn589792.aspx) – gaheinrichs
謝謝@gaheinrichs。我會按照你的說法嘗試。 – Nagesh
@gaheinrichs除了鏈接之外,最好在答案中包含相關信息。否則,立即考慮刪除鏈接的答案。您在這裏獲得高質量答案的良好開端,因此請採取額外步驟幷包括如何使用您推薦的方法。 –