netgescon-master/docs/00-ROLE-PERMISSION-SYSTEM.md

6.5 KiB

🔐 NETGESCON - GESTIONE RUOLI E PERMESSI UTENTE

Data Creazione: 22/07/2025
Versione: 1.0
Sistema: Layout Management + Role-Based Access Control

🚨 PROBLEMA RISOLTO: LAYOUT MULTIPLI E CONFUSIONE

SITUAZIONE PRIMA

  • Directory multiple con file duplicati (netgescon-laravel/, netgescon/, resources/)
  • Layout inconsistenti (layouts.app, layouts.app-universal-v2, admin.layouts.netgescon)
  • Pagine che caricavano layout sbagliati o obsoleti
  • Confusione grafica quando si modificavano i pulsanti

SITUAZIONE DOPO

  • Directory duplicate spostate in _BACKUP_OLD_*_INACTIVE
  • Layout unificato - SOLO admin.layouts.netgescon
  • 31 file corretti automaticamente
  • Sistema automatico per prevenire regressioni future

🛠️ SISTEMA AUTOMATICO IMPLEMENTATO

1. CONFIGURAZIONE CENTRALIZED

File: /config/netgescon.php

'active_layout' => 'admin.layouts.netgescon',
'deprecated_layouts' => [
    'layouts.app-universal-v2',
    'layouts.app', 
    'layouts.app-clean'
]

2. MIDDLEWARE AUTOMATICO

File: /app/Http/Middleware/NetgesconLayoutMiddleware.php

  • Applica automaticamente il layout corretto
  • Gestisce i ruoli utente (amministratore, collaboratore, operatore, condomino)
  • Condivide variabili con tutte le viste

3. COMANDO PULIZIA AUTOMATICA

# Controlla cosa cambierebbe
php artisan netgescon:clean-layouts --dry-run

# Applica correzioni automatiche  
php artisan netgescon:clean-layouts

# Risultato: 31 file corretti automaticamente!

👥 SISTEMA RUOLI UTENTE

AMMINISTRATORE (Accesso Completo)

'amministratore' => [
    'layout' => 'admin.layouts.netgescon',
    'permissions' => ['*'], // Tutti i permessi
    'menus' => [
        'dashboard', 'stabili', 'palazzine', 'unita-immobiliari',
        'condomini', 'contabilita', 'assemblee', 'risorse-economiche',
        'affitti', 'fiscale', 'comunicazioni', 'pratiche', 
        'consumi', 'tickets', 'superadmin'
    ]
]

COLLABORATORE (R/W Limitato)

'collaboratore' => [
    'permissions' => ['read', 'create', 'update'], // No delete
    'menus' => [
        'dashboard', 
        'stabili' => ['read', 'create', 'update'],
        'palazzine' => ['read', 'create', 'update'], 
        'unita-immobiliari' => ['read', 'create', 'update'],
        'condomini' => ['read'], // Solo lettura
        'contabilita' => ['read'], // Solo lettura
        'comunicazioni' => ['read', 'create'],
        'tickets' => ['read', 'create', 'update']
    ]
]

OPERATORE (R/Create Limitato)

'operatore' => [
    'permissions' => ['read', 'create'], // Solo lettura e inserimento
    'menus' => [
        'dashboard',
        'stabili' => ['read'],
        'palazzine' => ['read'], 
        'unita-immobiliari' => ['read'],
        'tickets' => ['read', 'create']
    ]
]

CONDOMINO (Solo Lettura Personale)

'condomino' => [
    'layout' => 'condomino.layout', // Layout diverso
    'permissions' => ['read'],
    'menus' => [
        'dashboard',
        'my-unita' => ['read'], // Solo la sua unità
        'documenti' => ['read'],
        'comunicazioni' => ['read'], 
        'contabilita' => ['read'] // Solo la sua quota
    ]
]

🎯 IMPLEMENTAZIONE NEI TEMPLATE

USO NELLE VISTE BLADE

@extends($activeLayout ?? 'admin.layouts.netgescon')

{{-- Controllo permessi --}}
@if(in_array('create', $userPermissions ?? []))
    <a href="{{ route('admin.stabili.create') }}" class="btn btn-primary">
        <i class="fas fa-plus"></i> Nuovo Stabile
    </a>
@endif

{{-- Menu condizionale --}}
@if(isset($userMenus['superadmin']))
    <li class="nav-item">
        <a class="nav-link" href="{{ route('superadmin.dashboard') }}">
            <i class="fas fa-cog"></i> Configurazione Sistema
        </a>
    </li>
@endif

CONTROLLER AUTOMÁTICO

// Il middleware automaticamente fornisce:
// $userRole, $userPermissions, $userMenus, $activeLayout

public function index()
{
    // I permessi sono già verificati dal middleware
    $stabili = Stabile::all();
    return view('admin.stabili.index', compact('stabili'));
}

🔧 MANUTENZIONE E PREVENZIONE

COMANDI UTILI

# Controlla stato layout
php artisan netgescon:clean-layouts --dry-run

# Pulizia automatica (da eseguire dopo modifiche)
php artisan netgescon:clean-layouts

# Pulizia cache completa
php artisan view:clear && php artisan config:clear && php artisan route:clear

DIRECTORY INATTIVE

_BACKUP_OLD_netgescon-laravel_INACTIVE/  ← Directory resa inattiva
_BACKUP_OLD_netgescon_INACTIVE/          ← Directory resa inattiva

resources/views/                         ← UNICA DIRECTORY ATTIVA

FILE DA NON TOCCARE

  • /config/netgescon.php - Configurazione ruoli e layout
  • /app/Http/Middleware/NetgesconLayoutMiddleware.php - Middleware automatico
  • /app/Console/Commands/CleanDeprecatedLayouts.php - Comando pulizia

🎉 RISULTATI FINALI

LAYOUT UNIFICATO

  • 31 file corretti automaticamente
  • Layout consistente in tutte le pagine
  • Logout funzionale ovunque con header blu

SISTEMA RUOLI

  • 4 tipi utente configurati (admin, collaboratore, operatore, condomino)
  • Permessi granulari (R/W per sezione)
  • Menu condizionali basati su ruolo

PREVENZIONE FUTURA

  • Middleware automatico applica layout corretto
  • Comando pulizia per correzioni massive
  • Directory backup inattive per evitare confusione

PRONTO PER

  • Personalizzazione accessi per ruolo utente
  • Layout specifici per tipologia utente
  • Scalabilità futura con nuovi ruoli

📋 WORKFLOW FUTURO

QUANDO AGGIUNGI UNA NUOVA PAGINA

  1. Usa sempre @extends('admin.layouts.netgescon')
  2. Implementa controlli permessi con $userPermissions
  3. Testa con diversi ruoli utente
  4. Esegui php artisan netgescon:clean-layouts --dry-run

QUANDO MODIFICHI LAYOUT

  1. Modifica SOLO /resources/views/admin/layouts/netgescon.blade.php
  2. Testa logout e navigazione
  3. Pulisci cache: php artisan view:clear
  4. Verifica funzionamento su tutte le pagine principali

QUANDO AGGIUNGI RUOLI

  1. Configura in /config/netgescon.php
  2. Aggiorna middleware se necessario
  3. Testa accesso condizionale ai menu
  4. Documenta nuovi permessi

🚀 SISTEMA COMPLETAMENTE AUTOMATIZZATO E PRONTO PER LA PRODUZIONE! 🚀