409 lines
14 KiB
PHP
409 lines
14 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\View;
|
|
|
|
class MenuPermissionMiddleware
|
|
{
|
|
/**
|
|
* Handle an incoming request.
|
|
*/
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
// Inizializza sempre le variabili per evitare errori undefined
|
|
$userPermissions = ['dashboard' => 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
|
|
}
|
|
}
|