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