Files
glastree/app/Http/Controllers/Admin/RuoloController.php
T

106 lines
3.2 KiB
PHP
Raw Normal View History

2026-05-26 08:14:29 +02:00
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\ActivityLog;
use App\Models\RolePreset;
use App\Models\User;
use Illuminate\Http\Request;
class RuoloController extends Controller
{
public function index()
{
$ruoli = RolePreset::withCount('users')->get();
return view('admin.ruoli.index', compact('ruoli'));
}
public function create()
{
return view('admin.ruoli.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|string|max:50|unique:role_presets,name',
'description' => 'nullable|string|max:255',
'permissions' => 'required|array',
'permissions.*' => 'in:0,1,2',
]);
$ruolo = RolePreset::create([
'name' => $validated['name'],
'description' => $validated['description'] ?? null,
'permissions' => $validated['permissions'],
]);
ActivityLog::log('create', 'ruoli', 'Creato ruolo: ' . $ruolo->name, [
'role_id' => $ruolo->id,
'permissions' => $validated['permissions'],
]);
return redirect('/admin/ruoli')->with('success', 'Ruolo creato.');
}
public function edit($id)
{
$ruolo = RolePreset::findOrFail($id);
$usersCount = $ruolo->users()->count();
return view('admin.ruoli.edit', compact('ruolo', 'usersCount'));
}
public function update(Request $request, $id)
{
$ruolo = RolePreset::findOrFail($id);
$validated = $request->validate([
'description' => 'nullable|string|max:255',
'permissions' => 'required|array',
'permissions.*' => 'in:0,1,2',
]);
$old = $ruolo->permissions;
$ruolo->description = $validated['description'];
$ruolo->permissions = $validated['permissions'];
$ruolo->save();
ActivityLog::log('update', 'ruoli', 'Modificato ruolo: ' . $ruolo->name, [
'role_id' => $ruolo->id,
'old_permissions' => $old,
'new_permissions' => $validated['permissions'],
]);
if ($request->input('update_users') === '1') {
foreach ($ruolo->users as $user) {
$user->permissions = $ruolo->permissions;
$user->save();
}
return redirect('/admin/ruoli')->with('success', 'Ruolo aggiornato e permessi propagati a ' . $ruolo->users()->count() . ' utenti.');
}
return redirect('/admin/ruoli')->with('success', 'Ruolo aggiornato.');
}
public function destroy($id)
{
$ruolo = RolePreset::findOrFail($id);
if ($ruolo->users()->count() > 0) {
return redirect('/admin/ruoli')->with('error', 'Impossibile eliminare: ci sono ' . $ruolo->users()->count() . ' utenti con questo ruolo.');
}
$name = $ruolo->name;
ActivityLog::log('delete', 'ruoli', 'Eliminato ruolo: ' . $name, [
'role_id' => $id,
'permissions' => $ruolo->permissions,
]);
$ruolo->delete();
return redirect('/admin/ruoli')->with('success', 'Ruolo eliminato.');
}
}