with('sections')->orderBy('name'); if ($request->filled('role')) { $query->where('role', $request->input('role')); } if ($request->filled('q')) { $q = trim($request->get('q')); $query->where(fn ($wq) => $wq ->where('name', 'ilike', "%{$q}%") ->orWhere('email', 'ilike', "%{$q}%") ); } $users = $query->paginate(25)->withQueryString(); return view('admin.utilisateurs.index', compact('users')); } public function edit(User $user): View { $user->load('sections', 'sourcesAssignees'); return view('admin.utilisateurs.edit', compact('user')); } public function update(Request $request, User $user): RedirectResponse { $data = $request->validate([ 'role' => ['required', new Enum(UserRole::class)], ]); if ($user->id === auth()->id()) { return back()->with('error', 'Vous ne pouvez pas modifier votre propre rôle.'); } if ($user->role === UserRole::Admin && $data['role'] !== UserRole::Admin->value) { $adminCount = User::where('role', UserRole::Admin->value)->count(); if ($adminCount <= 1) { return back()->with('error', 'Impossible de retirer le rôle admin au dernier administrateur.'); } } $user->update(['role' => $data['role']]); return back()->with('success', 'Rôle mis à jour.'); } public function toggleActive(User $user): RedirectResponse { if ($user->id === auth()->id()) { return back()->with('error', 'Vous ne pouvez pas désactiver votre propre compte.'); } if ($user->is_active && $user->role === UserRole::Admin) { $activeAdmins = User::where('role', UserRole::Admin->value)->where('is_active', true)->count(); if ($activeAdmins <= 1) { return back()->with('error', 'Impossible de désactiver le dernier administrateur actif.'); } } $user->update(['is_active' => ! $user->is_active]); $label = $user->is_active ? 'activé' : 'désactivé'; return back()->with('success', "Compte {$label}."); } }