paginate(15); $roles = $this->getAvailableRoles(); return view('admin.permissions.index', compact('users', 'roles')); } /** * Mostra form di modifica permessi utente */ public function edit(User $user) { $roles = $this->getAvailableRoles(); $permissions = $this->getAllPermissions(); $userPermissions = json_decode($user->custom_permissions ?? '{}', true); return view('admin.permissions.edit', compact('user', 'roles', 'permissions', 'userPermissions')); } /** * Aggiorna permessi utente */ public function update(Request $request, User $user) { $request->validate([ 'role' => 'required|in:' . implode(',', array_keys($this->getAvailableRoles())), 'permissions' => 'array', 'assigned_stabili' => 'array', ]); // Aggiorna ruolo $user->role = $request->role; // Aggiorna permessi personalizzati per collaboratori if ($request->role === 'collaboratore') { $customPermissions = []; if ($request->permissions) { foreach ($request->permissions as $permission) { $customPermissions[$permission] = true; } } $user->custom_permissions = json_encode($customPermissions); } else { $user->custom_permissions = null; } // Aggiorna stabili assegnati per manutentori if ($request->role === 'manutentore' && $request->assigned_stabili) { $user->assigned_stabili = json_encode($request->assigned_stabili); } else { $user->assigned_stabili = null; } $user->save(); return redirect()->route('admin.permissions.index') ->with('success', 'Permessi aggiornati con successo per ' . $user->name); } /** * Crea nuovo utente con permessi */ public function create() { $roles = $this->getAvailableRoles(); $permissions = $this->getAllPermissions(); return view('admin.permissions.create', compact('roles', 'permissions')); } /** * Salva nuovo utente */ public function store(Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|min:8|confirmed', 'role' => 'required|in:' . implode(',', array_keys($this->getAvailableRoles())), 'permissions' => 'array', 'assigned_stabili' => 'array', ]); $user = User::create([ 'name' => $request->name, 'email' => $request->email, 'password' => Hash::make($request->password), 'role' => $request->role, ]); // Gestione permessi personalizzati if ($request->role === 'collaboratore' && $request->permissions) { $customPermissions = []; foreach ($request->permissions as $permission) { $customPermissions[$permission] = true; } $user->custom_permissions = json_encode($customPermissions); } // Gestione stabili assegnati if ($request->role === 'manutentore' && $request->assigned_stabili) { $user->assigned_stabili = json_encode($request->assigned_stabili); } $user->save(); return redirect()->route('admin.permissions.index') ->with('success', 'Utente creato con successo: ' . $user->name); } /** * Impersonifica utente (solo super admin) */ public function impersonate(User $user) { if (auth()->user()->role !== 'super_admin') { abort(403, 'Non autorizzato'); } session(['impersonating' => $user->id]); session(['original_user' => auth()->id()]); auth()->login($user); return redirect()->route('dashboard') ->with('warning', 'Stai impersonificando: ' . $user->name . '. Clicca per tornare al tuo account.'); } /** * Termina impersonificazione */ public function stopImpersonating() { if (!session('impersonating')) { return redirect()->route('dashboard'); } $originalUserId = session('original_user'); session()->forget(['impersonating', 'original_user']); if ($originalUserId) { $originalUser = User::find($originalUserId); if ($originalUser) { auth()->login($originalUser); } } return redirect()->route('admin.permissions.index') ->with('success', 'Impersonificazione terminata'); } /** * Ruoli disponibili nel sistema */ private function getAvailableRoles() { return [ 'user' => 'Utente Base', 'collaboratore' => 'Collaboratore (Permessi Personalizzati)', 'contabile' => 'Responsabile Contabilità', 'fatture_acquisto' => 'Gestione Fatture Acquisto', 'fatture_emesse' => 'Gestione Fatture Emesse', 'rate_manager' => 'Gestione Rate e Pagamenti', 'assemblee_manager' => 'Gestione Assemblee', 'manutentore' => 'Manutentore', 'amministratore' => 'Amministratore', 'super_admin' => 'Super Amministratore', ]; } /** * Tutti i permessi disponibili */ private function getAllPermissions() { return [ 'dashboard' => 'Dashboard', 'stabili' => 'Gestione Stabili', 'unita' => 'Unità Immobiliari', 'soggetti' => 'Gestione Soggetti', 'contabilita' => 'Contabilità', 'fatture_acquisto' => 'Fatture Acquisto', 'fatture_emesse' => 'Fatture Emesse', 'rate' => 'Gestione Rate', 'assemblee' => 'Assemblee', 'rubrica' => 'Rubrica', 'calendario' => 'Calendario', 'manutentori' => 'Area Manutentori', 'xml_fatture' => 'Preparazione XML Fatture', 'amministrazione' => 'Amministrazione', 'gestione_permessi' => 'Gestione Permessi Utenti', ]; } }