user()->hasRole('Admin')) { abort(403); } return Inertia::render('Service/Index', [ 'services' => Service::all(), ]); } public function create() { if (!auth()->user()->hasRole('Admin')) { abort(403); } return Inertia::render('Service/Create'); } public function store(Request $request) { if (!auth()->user()->hasRole('Admin')) { abort(403); } $validated = $request->validate([ 'name' => 'required|string|max:255|unique:services,name', 'code' => 'required|string|max:50|unique:services,code', 'is_active' => 'boolean', ]); $service = Service::create([ 'name' => $validated['name'], 'code' => strtolower($validated['code']), 'is_active' => $validated['is_active'] ?? true, ]); // Création de la Permission (tâche) $permissionName = 'manage ' . strtolower($service->name) . ' tasks'; Permission::firstOrCreate(['name' => $permissionName]); // Création du Rôle pour ce Service $role = Role::firstOrCreate(['name' => $service->name]); $role->givePermissionTo([ $permissionName, 'view dashboard', ]); return redirect()->route('services.index')->with('success', 'Service créé avec succès.'); } public function edit(Service $service) { if (!auth()->user()->hasRole('Admin')) { abort(403); } return Inertia::render('Service/Edit', [ 'service' => $service, ]); } public function update(Request $request, Service $service) { if (!auth()->user()->hasRole('Admin')) { abort(403); } $validated = $request->validate([ 'name' => 'required|string|max:255|unique:services,name,' . $service->id, 'code' => 'required|string|max:50|unique:services,code,' . $service->id, 'is_active' => 'boolean', ]); $oldName = $service->name; $service->update([ 'name' => $validated['name'], 'code' => strtolower($validated['code']), 'is_active' => $validated['is_active'] ?? true, ]); // Si le nom du service change, on met à jour le rôle et la permission correspondante if ($oldName !== $service->name) { $oldPermissionName = 'manage ' . strtolower($oldName) . ' tasks'; $newPermissionName = 'manage ' . strtolower($service->name) . ' tasks'; $permission = Permission::where('name', $oldPermissionName)->first(); if ($permission) { $permission->update(['name' => $newPermissionName]); } $role = Role::where('name', $oldName)->first(); if ($role) { $role->update(['name' => $service->name]); } } return redirect()->route('services.index')->with('success', 'Service mis à jour avec succès.'); } public function destroy(Service $service) { if (!auth()->user()->hasRole('Admin')) { abort(403); } $permissionName = 'manage ' . strtolower($service->name) . ' tasks'; $permission = Permission::where('name', $permissionName)->first(); if ($permission) { $permission->delete(); } $role = Role::where('name', $service->name)->first(); if ($role) { $role->delete(); } $service->delete(); return redirect()->route('services.index')->with('success', 'Service supprimé avec succès.'); } }