Как отследить каждое взаимодействие с базой пользователей в laravel 5?

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

Пример:

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

user  |   user_id  |   service     |   query
user1 |     1      | deleteProfile |   "DELETE FROM Users WHERE id=1"user2 |     2      | updateProfile |   "UPDATE Users SET lastname='Thaper' WHERE id=2"

Для этого я попытался использовать журнал активности, как antonioribeiro / трекер а также Laravel-activitylog и т.д., но это не соответствовало моим требованиям.

Как я могу сделать это в Laravel 5.2?

2

Решение

Вы можете сделать это с помощью промежуточного программного обеспечения:

use DB;

class DatabaseLogger {

public function handle($request, $next) {
DB::connection()->enableQueryLog();
return $next($request);
}

public function terminate($request, $response) {
$queries = DB::getQueryLog();
$id = Auth::check()?Auth::id():null;
collect($queries)->each(function ($query) use ($id) {
DB::table("querylogtable")->insert(["user_id"=>$id,"query"=>$query]);
});
}

}

Добавьте это промежуточное ПО в свой Kernel.php

protected $middleware = [
CheckForMaintenanceMode::class,
DatabaseLogger::class
];

Помните, что хранение всех запросов в памяти может обременительно, если выполняется много запросов.

Больше информации на https://laravel.com/docs/5.0/database#query-logging

В качестве альтернативы вы можете зарегистрировать следующее у поставщика услуг:

   DB::listen(function ($query) {
//code to log the query
});

Однако имейте в виду, что регистрация запроса также вызовет это событие, ведущее к бесконечной рекурсивной регистрации, поэтому, если вы идете по этому маршруту, убедитесь, что вы не регистрируете событие регистрации.

Больше информации о: https://laravel.com/docs/5.2/database#running-queries

3

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

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

По вопросам рекламы [email protected]