118 lines
3.1 KiB
Markdown
118 lines
3.1 KiB
Markdown
# 🏗️ 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**
|
|
|
|
```sql
|
|
-- 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**
|
|
|
|
```php
|
|
// 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**
|