user()->role !== 'chef_service') { abort(403, 'Action non autorisée. Réservé aux chefs de service.'); } } /** * Liste des utilisateurs. */ public function index(Request $request) { $this->authorizeAdmin($request); $users = User::latest()->get(); return Inertia::render('Users/Index', [ 'users' => $users, ]); } /** * Formulaire de création. */ public function create(Request $request) { $this->authorizeAdmin($request); return Inertia::render('Users/Form', [ 'isEdit' => false, 'user' => null, ]); } /** * Enregistrer un nouvel utilisateur. */ public function store(Request $request) { $this->authorizeAdmin($request); $validated = $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users', 'password' => 'required|string|min:8', 'role' => 'required|string|in:chef_service,admin_reseau', ]); User::create([ 'name' => $validated['name'], 'email' => $validated['email'], 'password' => Hash::make($validated['password']), 'role' => $validated['role'], ]); return redirect()->route('users.index')->with('success', 'Utilisateur créé avec succès.'); } /** * Formulaire d'édition. */ public function edit(Request $request, User $user) { $this->authorizeAdmin($request); return Inertia::render('Users/Form', [ 'isEdit' => true, 'user' => $user, ]); } /** * Mettre à jour un utilisateur. */ public function update(Request $request, User $user) { $this->authorizeAdmin($request); $validated = $request->validate([ 'name' => 'required|string|max:255', 'email' => [ 'required', 'string', 'email', 'max:255', Rule::unique('users')->ignore($user->id), ], 'password' => 'nullable|string|min:8', 'role' => 'required|string|in:chef_service,admin_reseau', ]); $data = [ 'name' => $validated['name'], 'email' => $validated['email'], 'role' => $validated['role'], ]; if (!empty($validated['password'])) { $data['password'] = Hash::make($validated['password']); } $user->update($data); return redirect()->route('users.index')->with('success', 'Utilisateur mis à jour avec succès.'); } /** * Supprimer un utilisateur. */ public function destroy(Request $request, User $user) { $this->authorizeAdmin($request); if ($request->user()->id === $user->id) { return redirect()->back()->withErrors(['error' => 'Vous ne pouvez pas vous supprimer vous-même !']); } $user->delete(); return redirect()->route('users.index')->with('success', 'Utilisateur supprimé avec succès.'); } }