authorize('viewAny', User::class); $users = User::with('department') ->where('role', 'user') ->when($request->search, fn ($q, $s) => $q->where('name', 'like', "%{$s}%") ->orWhere('email', 'like', "%{$s}%") ) ->when($request->status, fn ($q, $s) => $q->where('is_active', $s === 'active') ) ->orderBy('name') ->paginate(20) ->withQueryString(); return view('admin.users.index', compact('users')); } public function create(): View { $this->authorize('create', User::class); $departments = Department::where('is_active', true)->orderBy('name')->get(); return view('admin.users.create', compact('departments')); } public function store(CreateUserRequest $request, CreateUserAction $action): RedirectResponse { $action->execute($request->validated()); return redirect()->route('admin.users.index') ->with('success', 'Pengguna berjaya didaftarkan.'); } public function edit(User $user): View { $this->authorize('changeEmail', $user); $departments = Department::where('is_active', true)->orderBy('name')->get(); return view('admin.users.edit', compact('user', 'departments')); } public function updateEmail(UpdateUserEmailRequest $request, User $user, ChangeUserEmailAction $action): RedirectResponse { $this->authorize('changeEmail', $user); $action->execute($user, $request->email, $request->justification); return redirect()->route('admin.users.index') ->with('success', "E-mel pengguna {$user->name} berjaya dikemaskini."); } public function activate(Request $request, User $user, ActivateUserAction $action): RedirectResponse { $this->authorize('activate', $user); $action->execute($user); return redirect()->route('admin.users.index') ->with('success', "Akaun {$user->name} berjaya diaktifkan."); } public function deactivate(Request $request, User $user, DeactivateUserAction $action): RedirectResponse { $this->authorize('deactivate', $user); $action->execute($user, $request->justification); return redirect()->route('admin.users.index') ->with('success', "Akaun {$user->name} berjaya dinyahaktifkan."); } public function destroy(Request $request, User $user, DeleteUserAction $action): RedirectResponse { $this->authorize('delete', $user); $action->execute($user, $request->justification); return redirect()->route('admin.users.index') ->with('success', "Pengguna {$user->name} berjaya dipadam."); } }