feat(activity): 實作使用者角色分配操作紀錄
- 在使用者建立 (store) 時,將角色名稱寫入操作紀錄 - 在使用者更新 (update) 時,手動比對與紀錄角色名稱異動
This commit is contained in:
@@ -76,6 +76,21 @@ class UserController extends Controller
|
|||||||
|
|
||||||
if (!empty($validated['roles'])) {
|
if (!empty($validated['roles'])) {
|
||||||
$user->syncRoles($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', '使用者建立成功');
|
return redirect()->route('users.index')->with('success', '使用者建立成功');
|
||||||
@@ -102,6 +117,7 @@ class UserController extends Controller
|
|||||||
public function update(Request $request, string $id)
|
public function update(Request $request, string $id)
|
||||||
{
|
{
|
||||||
$user = User::findOrFail($id);
|
$user = User::findOrFail($id);
|
||||||
|
$oldRoles = $user->roles()->pluck('display_name')->join(', ');
|
||||||
|
|
||||||
$validated = $request->validate([
|
$validated = $request->validate([
|
||||||
'name' => ['required', 'string', 'max:255'],
|
'name' => ['required', 'string', 'max:255'],
|
||||||
@@ -128,6 +144,20 @@ class UserController extends Controller
|
|||||||
|
|
||||||
if (isset($validated['roles'])) {
|
if (isset($validated['roles'])) {
|
||||||
$user->syncRoles($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', '使用者更新成功');
|
return redirect()->route('users.index')->with('success', '使用者更新成功');
|
||||||
|
|||||||
Reference in New Issue
Block a user