-
-
Notifications
You must be signed in to change notification settings - Fork 27k
Expand file tree
/
Copy pathAuditLogController.php
More file actions
87 lines (78 loc) · 3.58 KB
/
AuditLogController.php
File metadata and controls
87 lines (78 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Modules\Core\Models\AuditLog;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Inertia\Response;
class AuditLogController extends Controller
{
public function index(Request $request): Response
{
$this->authorize('viewAny', User::class);
$query = AuditLog::with('user')
->where('audit_logs.tenant_id', auth()->user()->tenant_id)
->when($request->event, fn ($q) => $q->where('event', $request->event))
->when($request->user_id, fn ($q) => $q->where('user_id', $request->user_id))
->when($request->model, fn ($q) => $q->where('auditable_type', 'like', "%{$request->model}%"))
->when($request->date_from, fn ($q) => $q->whereDate('created_at', '>=', $request->date_from))
->when($request->date_to, fn ($q) => $q->whereDate('created_at', '<=', $request->date_to));
$logs = $query
->latest('created_at')
->paginate(50)
->withQueryString()
->through(fn ($log) => [
'id' => $log->id,
'event' => $log->event,
'action' => $log->action ?? $log->event,
'model' => class_basename($log->auditable_type),
'model_id' => $log->auditable_id,
'auditable_label'=> $log->auditable_label,
'user' => $log->user ? ['name' => $log->user->name, 'email' => $log->user->email] : null,
'user_name' => $log->user?->name ?? 'System',
'old_values' => $log->old_values,
'new_values' => $log->new_values,
'ip_address' => $log->ip_address,
'user_agent' => $log->user_agent,
'module' => $log->module,
'created_at' => $log->created_at->diffForHumans(),
'created_at_raw' => $log->created_at->toDateTimeString(),
]);
$users = User::where('tenant_id', auth()->user()->tenant_id)
->orderBy('name')
->get(['id', 'name']);
return Inertia::render('Admin/AuditLog/Index', [
'logs' => $logs,
'filters' => $request->only(['event', 'model', 'user_id', 'date_from', 'date_to']),
'users' => $users,
]);
}
public function show(AuditLog $log): Response
{
$this->authorize('viewAny', User::class);
$log->load('user');
return Inertia::render('Admin/AuditLog/Show', [
'log' => [
'id' => $log->id,
'event' => $log->event,
'action' => $log->action ?? $log->event,
'auditable_type' => $log->auditable_type,
'auditable_id' => $log->auditable_id,
'auditable_label'=> $log->auditable_label,
'old_values' => $log->old_values,
'new_values' => $log->new_values,
'ip_address' => $log->ip_address,
'user_agent' => $log->user_agent,
'url' => $log->url,
'module' => $log->module,
'user' => $log->user ? [
'id' => $log->user->id,
'name' => $log->user->name,
'email' => $log->user->email,
] : null,
'created_at' => $log->created_at->toDateTimeString(),
],
]);
}
}