137 lines
3.9 KiB
PHP
137 lines
3.9 KiB
PHP
<?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.');
|
|
}
|
|
}
|