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.'); } }