3.1 KiB
3.1 KiB
🏗️ 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_idin 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
amministratori.md→ Struttura tabella masterusers.md→ Collegamento utenti-amministratoriroles-permissions.md→ Sistema permessi
Step 2: Crea Migrations
- Amministratori (con codice 8 cifre + trigger)
- Users (con foreign key amministratore_id)
- Spatie permissions (roles, permissions, pivot tables)
Step 3: Implementa Query Pattern
- Sempre filtrare per amministratore_id
- Join con tabella amministratori per codice
- 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