Implémantation de la gestion des Services pouvant avoir des taches

This commit is contained in:
jeremy bayse
2026-02-21 17:38:04 +01:00
parent e7bff2ae80
commit 4fc7fdd7cd
14 changed files with 661 additions and 2 deletions

View File

@@ -0,0 +1,136 @@
<?php
namespace App\Http\Controllers;
use App\Models\Service;
use Illuminate\Http\Request;
use Inertia\Inertia;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class ServiceController extends Controller
{
public function index()
{
if (!auth()->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.');
}
}