false]; $userRole = 'guest'; $userRoles = []; $activeRole = 'guest'; if (auth()->check()) { $user = auth()->user(); // Gestione ruoli multipli $userRoles = $this->getUserRoles($user); $activeRole = $request->session()->get('active_role', $user->role ?? 'user'); // Se il ruolo attivo non è tra quelli disponibili, usa il primo disponibile if (!in_array($activeRole, $userRoles)) { $activeRole = $userRoles[0] ?? 'user'; $request->session()->put('active_role', $activeRole); } $userPermissions = $this->getUserPermissions($user, $activeRole); $userRole = $activeRole; } // Condividi sempre le variabili con tutte le viste View::share('userPermissions', $userPermissions); View::share('userRole', $userRole); View::share('userRoles', $userRoles); View::share('activeRole', $activeRole); return $next($request); } /** * Ottiene i permessi dell'utente basati sul ruolo attivo */ private function getUserPermissions($user, $activeRole = null) { $activeRole = $activeRole ?? $user->role ?? 'user'; $permissions = [ 'dashboard' => false, 'stabili' => false, 'unita' => false, 'soggetti' => false, 'contabilita' => false, 'fatture_acquisto' => false, 'fatture_emesse' => false, 'rate' => false, 'assemblee' => false, 'rubrica' => false, 'calendario' => false, 'manutentori' => false, 'amministrazione' => false, 'super_admin' => false, 'gestione_permessi' => false, 'xml_fatture' => false, // Nuovi permessi per condomini 'area_personale' => false, 'estratto_conto' => false, 'documenti_personali' => false, 'ticket_support' => false, 'assemblee_partecipazione' => false, 'comunicazioni' => false, 'deleghe' => false, ]; // Determina i permessi in base al ruolo attivo switch ($activeRole) { case 'super_admin': return array_fill_keys(array_keys($permissions), true); case 'amministratore': $permissions = array_merge($permissions, [ 'dashboard' => true, 'stabili' => true, 'unita' => true, 'soggetti' => true, 'contabilita' => true, 'fatture_acquisto' => true, 'fatture_emesse' => true, 'rate' => true, 'assemblee' => true, 'rubrica' => true, 'calendario' => true, 'amministrazione' => true, 'gestione_permessi' => true, 'ticket_support' => true, 'comunicazioni' => true, ]); break; case 'contabile': $permissions = array_merge($permissions, [ 'dashboard' => true, 'contabilita' => true, 'fatture_acquisto' => true, 'soggetti' => true, // Solo per consultazione ]); break; case 'fatture_acquisto': $permissions = array_merge($permissions, [ 'dashboard' => true, 'fatture_acquisto' => true, 'soggetti' => true, // Solo fornitori ]); break; case 'fatture_emesse': $permissions = array_merge($permissions, [ 'dashboard' => true, 'fatture_emesse' => true, 'soggetti' => true, // Solo clienti 'xml_fatture' => true, ]); break; case 'rate_manager': $permissions = array_merge($permissions, [ 'dashboard' => true, 'rate' => true, 'soggetti' => true, // Solo condomini 'unita' => true, // Solo consultazione ]); break; case 'assemblee_manager': $permissions = array_merge($permissions, [ 'dashboard' => true, 'assemblee' => true, 'rubrica' => true, 'calendario' => true, 'soggetti' => true, // Solo condomini 'comunicazioni' => true, ]); break; case 'manutentore': $permissions = array_merge($permissions, [ 'dashboard' => true, 'manutentori' => true, 'xml_fatture' => true, 'ticket_support' => true, ]); // Aggiungi permessi specifici per condomini assegnati if (isset($user->assigned_stabili)) { $permissions['stabili'] = 'limited'; // Solo stabili assegnati $permissions['unita'] = 'limited'; // Solo unità degli stabili assegnati } break; case 'collaboratore': $permissions['dashboard'] = true; $permissions['ticket_support'] = true; // I permessi specifici vengono gestiti tramite la tabella user_permissions if ($user->custom_permissions) { $customPermissions = json_decode($user->custom_permissions, true); $permissions = array_merge($permissions, $customPermissions); } break; // NUOVI RUOLI PER CONDOMINI case 'condomino': case 'proprietario': case 'inquilino': $permissions = array_merge($permissions, [ 'dashboard' => true, 'area_personale' => true, 'estratto_conto' => true, 'documenti_personali' => true, 'ticket_support' => true, 'assemblee_partecipazione' => true, 'comunicazioni' => 'read_only', ]); // Permessi aggiuntivi per proprietari if ($activeRole === 'proprietario') { $permissions['deleghe'] = true; $permissions['unita'] = 'own_only'; // Solo le proprie unità } break; case 'delegato': $permissions = array_merge($permissions, [ 'dashboard' => true, 'area_personale' => true, 'estratto_conto' => 'delegated', // Solo per gli account delegati 'assemblee_partecipazione' => true, 'ticket_support' => true, ]); break; default: // Utente normale - solo dashboard $permissions['dashboard'] = true; break; } return $permissions; } { $permissions = [ 'dashboard' => false, 'stabili' => false, 'unita' => false, 'soggetti' => false, 'contabilita' => false, 'fatture_acquisto' => false, 'fatture_emesse' => false, 'rate' => false, 'assemblee' => false, 'rubrica' => false, 'calendario' => false, 'manutentori' => false, 'amministrazione' => false, 'super_admin' => false, 'gestione_permessi' => false, 'xml_fatture' => false, ]; // Determina i permessi in base al ruolo switch ($user->role) { case 'super_admin': return array_fill_keys(array_keys($permissions), true); case 'amministratore': $permissions = array_merge($permissions, [ 'dashboard' => true, 'stabili' => true, 'unita' => true, 'soggetti' => true, 'contabilita' => true, 'fatture_acquisto' => true, 'fatture_emesse' => true, 'rate' => true, 'assemblee' => true, 'rubrica' => true, 'calendario' => true, 'amministrazione' => true, 'gestione_permessi' => true, ]); break; case 'contabile': $permissions = array_merge($permissions, [ 'dashboard' => true, 'contabilita' => true, 'fatture_acquisto' => true, 'soggetti' => true, // Solo per consultazione ]); break; case 'fatture_acquisto': $permissions = array_merge($permissions, [ 'dashboard' => true, 'fatture_acquisto' => true, 'soggetti' => true, // Solo fornitori ]); break; case 'fatture_emesse': $permissions = array_merge($permissions, [ 'dashboard' => true, 'fatture_emesse' => true, 'soggetti' => true, // Solo clienti 'xml_fatture' => true, ]); break; case 'rate_manager': $permissions = array_merge($permissions, [ 'dashboard' => true, 'rate' => true, 'soggetti' => true, // Solo condomini 'unita' => true, // Solo consultazione ]); break; case 'assemblee_manager': $permissions = array_merge($permissions, [ 'dashboard' => true, 'assemblee' => true, 'rubrica' => true, 'calendario' => true, 'soggetti' => true, // Solo condomini ]); break; case 'manutentore': $permissions = array_merge($permissions, [ 'dashboard' => true, 'manutentori' => true, 'xml_fatture' => true, ]); // Aggiungi permessi specifici per condomini assegnati if (isset($user->assigned_stabili)) { $permissions['stabili'] = 'limited'; // Solo stabili assegnati $permissions['unita'] = 'limited'; // Solo unità degli stabili assegnati } break; case 'collaboratore': $permissions['dashboard'] = true; // I permessi specifici vengono gestiti tramite la tabella user_permissions if ($user->custom_permissions) { $customPermissions = json_decode($user->custom_permissions, true); $permissions = array_merge($permissions, $customPermissions); } break; default: // Utente normale - solo dashboard $permissions['dashboard'] = true; break; } return $permissions; } /** * Ottiene tutti i ruoli dell'utente (sistema ruoli multipli) */ private function getUserRoles($user) { $roles = []; // Ruolo principale dell'utente if ($user->role) { $roles[] = $user->role; } // Se l'utente è anche un condomino, aggiungi il ruolo 'condomino' if ($this->isCondomino($user)) { $roles[] = 'condomino'; } // Se l'utente è anche un proprietario, aggiungi il ruolo 'proprietario' if ($this->isProprietario($user)) { $roles[] = 'proprietario'; } // Se l'utente è anche un inquilino, aggiungi il ruolo 'inquilino' if ($this->isInquilino($user)) { $roles[] = 'inquilino'; } // Se l'utente ha deleghe da altri condomini if ($this->hasDeleghe($user)) { $roles[] = 'delegato'; } return array_unique($roles); } /** * Verifica se l'utente è un condomino */ private function isCondomino($user) { // Verifica se l'utente ha unità immobiliari associate return $user->unita_immobiliari()->exists() || $user->contratti_proprietario()->exists() || $user->contratti_inquilino()->exists(); } /** * Verifica se l'utente è un proprietario */ private function isProprietario($user) { return $user->contratti_proprietario()->exists(); } /** * Verifica se l'utente è un inquilino */ private function isInquilino($user) { return $user->contratti_inquilino()->exists(); } /** * Verifica se l'utente ha deleghe da altri condomini */ private function hasDeleghe($user) { // Implementare logica per verificare deleghe return false; // TODO: implementare quando avremo la tabella deleghe } }