netgescon-day0/docs/91-database/01-struttura-principale
2026-03-10 21:00:01 +00:00
..
amministratori.md chore: NetGescon day-0 baseline 2026-03-10 2026-03-10 21:00:01 +00:00
README.md chore: NetGescon day-0 baseline 2026-03-10 2026-03-10 21:00:01 +00:00
users.md chore: NetGescon day-0 baseline 2026-03-10 2026-03-10 21:00:01 +00:00

🏗️ STRUTTURA PRINCIPALE DATABASE

Tabelle core del sistema NetGescon


🎯 OBIETTIVO

Definire le tabelle fondamentali del sistema con architettura multi-tenant basata su codice amministratore di 8 cifre.


📋 TABELLE CORE IDENTIFICATE

1. AMMINISTRATORI - Tabella Master

  • Scopo: Tabella principale con codice univoco 8 cifre
  • Caratteristiche: Ogni amministratore ha la sua "bolla" di dati
  • File: amministratori.md

2. USERS - Utenti Sistema

  • Scopo: Utenti collegati agli amministratori
  • Caratteristiche: Ogni user appartiene a un amministratore
  • File: users.md

3. ROLES & PERMISSIONS - Sistema Ruoli

  • Scopo: Gestione permessi multi-ruolo
  • Caratteristiche: Spatie Laravel Permission
  • File: roles-permissions.md

🗄️ SCHEMA RELAZIONI CORE

-- Schema semplificato relazioni principali
amministratori (id, codice_univoco)
     (1:N)
users (id, amministratore_id)
     (N:M via model_has_roles)
roles (id, name)
     (N:M via role_has_permissions)  
permissions (id, name)

-- Tutti i dati business collegati ad amministratori
amministratori (id, codice_univoco)
     (1:N)
stabili (id, amministratore_id)
     (1:N)
gestioni (id, stabile_id)
     (1:N)
unita_immobiliari (id, stabile_id)

🔑 PRINCIPI ARCHITETTURA

🎯 Isolamento Dati:

  • Ogni amministratore vede SOLO i suoi dati
  • Filtro automatico su amministratore_id in tutte le query
  • Codice 8 cifre per identificazione univoca

🎯 Scalabilità:

  • Database single-tenant logico ma multi-tenant fisico
  • Possibilità di estrarre dati singolo amministratore
  • Backup/restore selettivo per amministratore

🎯 Sicurezza:

  • Nessun incrocio dati tra amministratori
  • Foreign key constraints per integrità
  • Audit trail con created_by/updated_by

🚀 IMPLEMENTAZIONE

Step 1: Leggi File Dettagliati

  1. amministratori.md → Struttura tabella master
  2. users.md → Collegamento utenti-amministratori
  3. roles-permissions.md → Sistema permessi

Step 2: Crea Migrations

  1. Amministratori (con codice 8 cifre + trigger)
  2. Users (con foreign key amministratore_id)
  3. Spatie permissions (roles, permissions, pivot tables)

Step 3: Implementa Query Pattern

  1. Sempre filtrare per amministratore_id
  2. Join con tabella amministratori per codice
  3. Middleware per controllo accesso

📊 QUERY PATTERN ESEMPIO

// Laravel Controller pattern
class BaseController extends Controller 
{
    protected function getAmministratoreId()
    {
        return auth()->user()->amministratore_id;
    }
    
    protected function scopeForAmministratore($query)
    {
        return $query->where('amministratore_id', $this->getAmministratoreId());
    }
}

// Esempio query stabili per amministratore loggato
$stabili = DB::table('stabili')
    ->where('amministratore_id', auth()->user()->amministratore_id)
    ->get();

📖 Continua con amministratori.md per dettagli implementazione