From cdcc0f4ce38a6b9d2e1705ef265c409bd681e3a8 Mon Sep 17 00:00:00 2001 From: sky121113 Date: Mon, 19 Jan 2026 16:06:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(activity):=20=E5=AF=A6=E4=BD=9C=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=80=85=E8=A7=92=E8=89=B2=E5=88=86=E9=85=8D=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E7=B4=80=E9=8C=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在使用者建立 (store) 時,將角色名稱寫入操作紀錄 - 在使用者更新 (update) 時,手動比對與紀錄角色名稱異動 --- app/Http/Controllers/Admin/UserController.php | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 81dbd14..027e7f9 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -76,6 +76,21 @@ class UserController extends Controller if (!empty($validated['roles'])) { $user->syncRoles($validated['roles']); + + // Update the 'created' log to include roles + $activity = \Spatie\Activitylog\Models\Activity::where('subject_type', get_class($user)) + ->where('subject_id', $user->id) + ->where('event', 'created') + ->latest() + ->first(); + + if ($activity) { + $roleNames = $user->roles()->pluck('display_name')->join(', '); + $properties = $activity->properties; + $properties['attributes']['role_id'] = $roleNames; + $activity->properties = $properties; + $activity->save(); + } } return redirect()->route('users.index')->with('success', '使用者建立成功'); @@ -102,6 +117,7 @@ class UserController extends Controller public function update(Request $request, string $id) { $user = User::findOrFail($id); + $oldRoles = $user->roles()->pluck('display_name')->join(', '); $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], @@ -128,6 +144,20 @@ class UserController extends Controller if (isset($validated['roles'])) { $user->syncRoles($validated['roles']); + + $newRoles = $user->roles()->pluck('display_name')->join(', '); + + if ($oldRoles !== $newRoles) { + activity() + ->performedOn($user) + ->causedBy(auth()->user()) + ->event('updated') + ->withProperties([ + 'attributes' => ['role_id' => $newRoles], + 'old' => ['role_id' => $oldRoles], + ]) + ->log('updated'); + } } return redirect()->route('users.index')->with('success', '使用者更新成功');