mysql — как регистрировать все веб-транзакции (PHP / Laravel)

Я разрабатываю одно безопасное приложение на PHP / MySQl (используя фреймворк Laravel 5.2) и ниже мое требование

  1. Мне нужно регистрировать все транзакции, которые происходят с приложением, скажем, например, кто вошел в систему, какие операции он сделал. Если он открывает какой-либо отчет, какой отчет он открыл и какие данные он видел и какие записи он видел?

  2. Это в основном для целей аудита, поэтому я должен иметь возможность хранить данные в БД и предоставлять аудиторской команде по требованию

Пожалуйста, дайте мне знать, если есть какие-либо плагины, которые поддерживают это требование или предложите мне лучший способ сделать это?

Заранее спасибо!

0

Решение

лесоруб

Самый простой и быстрый подход — использовать регистратор, предоставленный 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

Источник событий будет представлять большую сложность для вашего приложения, но он решит много вопросов. Реализуя этот шаблон, вы сможете не только регистрировать действия пользователя в вашей системе, но и отслеживать каждую сущность с течением времени. Это достигается только сохранением событий по мере их возникновения и воссозданием сущностей путем запуска всех событий. Это повлияет на производительность, но ее можно решить путем объединения этого шаблона с шаблоном материализованного представления. Это может добавить возможную согласованность в ваше приложение.

Пожалуйста, убедитесь, что действительно есть смысл использовать этот шаблон, иначе вы (и ваша команда) почувствуете боль сложности

3

Другие решения

Других решений пока нет …