106 lines
3.1 KiB
PHP
106 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace App\Helpers;
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class MenuHelper
|
|
{
|
|
/**
|
|
* Verifica se l'utente può accedere a una specifica sezione del menu
|
|
*/
|
|
public static function canUserAccessMenu($menuSection, $userRole = null)
|
|
{
|
|
// Se non specificato, prende il ruolo dall'utente autenticato
|
|
$userRole = $userRole ?? self::getCurrentUserRole();
|
|
|
|
// Definizione permessi per ogni ruolo
|
|
$permissions = [
|
|
'super_admin' => ['*'], // Accesso completo
|
|
'admin' => [
|
|
'dashboard', 'stabili', 'condomini', 'contabilita', 'fiscale',
|
|
'assemblee', 'risorse-economiche', 'comunicazioni', 'affitti',
|
|
'pratiche', 'consumi', 'tickets', 'impostazioni', 'utenti'
|
|
],
|
|
'amministratore' => [
|
|
'dashboard', 'stabili', 'condomini', 'contabilita', 'fiscale',
|
|
'assemblee', 'risorse-economiche', 'comunicazioni', 'affitti',
|
|
'pratiche', 'consumi', 'tickets'
|
|
],
|
|
'collaboratore' => [
|
|
'dashboard', 'stabili', 'condomini', 'contabilita',
|
|
'comunicazioni', 'tickets', 'pratiche'
|
|
],
|
|
'ragioniere' => [
|
|
'dashboard', 'contabilita', 'fiscale', 'risorse-economiche',
|
|
'comunicazioni', 'tickets'
|
|
],
|
|
'condomino' => [
|
|
'dashboard', 'comunicazioni', 'tickets'
|
|
],
|
|
'guest' => []
|
|
];
|
|
|
|
// Super admin ha accesso a tutto
|
|
if ($userRole === 'super_admin') {
|
|
return true;
|
|
}
|
|
|
|
// Verifica permessi specifici
|
|
$userPermissions = $permissions[$userRole] ?? [];
|
|
return in_array($menuSection, $userPermissions);
|
|
}
|
|
|
|
/**
|
|
* Wrapper per controllare multiple sezioni
|
|
*/
|
|
public static function canUserAccessAnyMenu($menuSections, $userRole = null)
|
|
{
|
|
if (!is_array($menuSections)) {
|
|
$menuSections = [$menuSections];
|
|
}
|
|
|
|
foreach ($menuSections as $section) {
|
|
if (self::canUserAccessMenu($section, $userRole)) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Ottiene il ruolo utente corrente
|
|
*/
|
|
public static function getCurrentUserRole()
|
|
{
|
|
if (Auth::check()) {
|
|
return Auth::user()->role ?? 'amministratore'; // Default per test
|
|
}
|
|
return 'guest';
|
|
}
|
|
|
|
/**
|
|
* Verifica se l'utente ha un ruolo specifico o superiore
|
|
*/
|
|
public static function hasMinimumRole($requiredRole, $userRole = null)
|
|
{
|
|
$userRole = $userRole ?? self::getCurrentUserRole();
|
|
|
|
$roleHierarchy = [
|
|
'guest' => 0,
|
|
'condomino' => 1,
|
|
'collaboratore' => 2,
|
|
'ragioniere' => 2,
|
|
'amministratore' => 3,
|
|
'admin' => 4,
|
|
'super_admin' => 5
|
|
];
|
|
|
|
$userLevel = $roleHierarchy[$userRole] ?? 0;
|
|
$requiredLevel = $roleHierarchy[$requiredRole] ?? 999;
|
|
|
|
return $userLevel >= $requiredLevel;
|
|
}
|
|
}
|