Я разрабатываю одно безопасное приложение на PHP / MySQl (используя фреймворк Laravel 5.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 в прошлом, и это работало хорошо для моей цели.
Когда происходит изменение, создание или удаление объекта, он вставит в таблицу ревизий запись с сериализованным значением предыдущих и новых значений.
Вам нужно будет настроить свои объекты. Это пример того, как я настроил его на объекте:
<?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');
}
}
После этого вы сможете отслеживать изменения ваших сущностей, не делая ничего лишнего в своем коде.
Событие Sourcing
Источник событий будет представлять большую сложность для вашего приложения, но он решит много вопросов. Реализуя этот шаблон, вы сможете не только регистрировать действия пользователя в вашей системе, но и отслеживать каждую сущность с течением времени. Это достигается только сохранением событий по мере их возникновения и воссозданием сущностей путем запуска всех событий. Это повлияет на производительность, но ее можно решить путем объединения этого шаблона с шаблоном материализованного представления. Это может добавить возможную согласованность в ваше приложение.
Пожалуйста, убедитесь, что действительно есть смысл использовать этот шаблон, иначе вы (и ваша команда) почувствуете боль сложности
Других решений пока нет …