Gestione Utenti
Elenco utenti, creazione, ruoli, permessi, moduli abilitati, workspace e sicurezza
Riferimenti normativi
- GDPR (Reg. UE 2016/679) art. 5 c.1 lett. f — Integrità e riservatezza: I dati personali devono essere trattati con misure tecniche e organizzative che garantiscano sicurezza adeguata, inclusa la protezione da accessi non autorizzati. Il sistema di ruoli e permessi implementa il principio del minimo privilegio.
- GDPR art. 25 — Protezione dei dati fin dalla progettazione: Il trattamento deve limitare per impostazione predefinita l'accesso ai soli dati necessari per la specifica finalità. I moduli abilitati per utente/workspace implementano questo principio.
- GDPR art. 29 — Trattamento sotto l'autorità del titolare: Chiunque abbia accesso ai dati personali può trattarli solo su istruzione del titolare. La configurazione dei ruoli (USER, OPERATOR, ADMIN) definisce le istruzioni operative per ciascun soggetto autorizzato.
- GDPR art. 32 — Sicurezza del trattamento: Obbligo di implementare misure adeguate tra cui: pseudonimizzazione, cifratura, capacità di assicurare riservatezza, integrità e disponibilità, capacità di ripristino. Il sistema di autenticazione e il controllo accessi per moduli soddisfano questi requisiti.
- D.Lgs. 196/2003 (Codice Privacy) art. 33-34 — Misure minime: Sistema di autenticazione informatica (credenziali individuali), sistema di autorizzazione (profili di accesso differenziati), aggiornamento periodico dei profili (almeno annuale).
- Provv. Garante Privacy 27/11/2008 — Amministratori di sistema: Obbligo di individuare nominativamente gli amministratori di sistema, verificarne l'operato almeno annualmente e registrare gli accessi logici. I ruoli ADMIN e SUPERADMIN corrispondono a questa figura.
- D.Lgs. 82/2005 (CAD) art. 64 — Identità digitale: I sistemi informatici pubblici e privati devono garantire l'identificazione certa degli utenti. Il sistema di login con username/password individuali soddisfa questo requisito.
- Art. 615-ter Codice Penale — Accesso abusivo a sistemi informatici: L'accesso non autorizzato a sistemi protetti è reato penale. Il sistema di ruoli e permessi documenta chi è autorizzato a fare cosa, tutelando sia l'azienda sia gli utenti.
Il modulo Gestione Utenti consente di creare, modificare e gestire gli account degli utenti che accedono a NOX Enterprise Suite. Ogni utente ha credenziali individuali, un ruolo che ne determina i permessi, e una configurazione di moduli e workspace personalizzata.
Funzionalità principali
- 4 livelli di ruolo gerarchici: USER, OPERATOR, ADMIN, SUPERADMIN
- Multi-workspace: ogni utente può accedere a più ambienti di lavoro con configurazioni indipendenti
- Moduli abilitati: configurazione granulare di quali sezioni del menu sono visibili per ogni utente e workspace
- Profilo personale: ogni utente può modificare i propri dati e cambiare la password
- Statistiche database: conteggio record per tabella nel workspace selezionato
- Operazioni avanzate: gestione backup workspace, dati demo, tabelle normativa
- Protezione eliminazione: conferma con nome completo per eliminare utenti ADMIN/SUPERADMIN
La schermata principale mostra tutti gli utenti in una lista con le seguenti informazioni:
| Colonna | Contenuto |
|---|---|
| Avatar | Iniziali dell'utente con colore basato sul ruolo |
| Nome | Nome e cognome completi |
| Username | Formato @username |
| Database | Badge con nome del workspace attivo (Principale o nome workspace) |
| Ruolo | Badge colorato con icona (security, shield, person, support_agent) |
| Stato | Pillola: Attivo (verde) o Inattivo (grigio) |
| Azioni | Pulsante elimina e freccia per accedere al dettaglio |
In alto: contatore utenti totali e utenti attivi. Pulsante + Nuovo per creare un nuovo utente.
- Dall'elenco utenti, premere + Nuovo Utente.
- Compilare il campo Username (obbligatorio, identificativo univoco per il login).
- Inserire la Password (obbligatoria, minimo 6 caratteri) e la Conferma password (deve corrispondere).
- Selezionare il Ruolo nella griglia con 4 opzioni:
- USER — Utente standard (default)
- OPERATOR — Operatore
- ADMIN — Amministratore
- SUPERADMIN — Super Amministratore (visibile solo ai SUPERADMIN)
- Premere Salva. L'utente viene creato e appare nell'elenco.
- Dopo la creazione, aprire l'utente per completare il profilo: nome, cognome, email, workspace, moduli abilitati.
| Ruolo | Icona | Accesso | Può gestire |
|---|---|---|---|
| USER | person | Solo consultazione base e moduli abilitati | Solo il proprio profilo |
| OPERATOR | support_agent | Operatività completa sui moduli abilitati | Solo il proprio profilo |
| ADMIN | shield | Tutti i moduli + gestione utenti, parametri, tabelle | Utenti USER e OPERATOR. Non può modificare altri ADMIN o SUPERADMIN. |
| SUPERADMIN | security | Accesso totale al sistema | Tutti gli utenti. Gestione workspace, database nascosti, backup, ripristino, eliminazione database. |
Differenze chiave ADMIN vs SUPERADMIN
| Operazione | ADMIN | SUPERADMIN |
|---|---|---|
| Vedere altri SUPERADMIN | ✗ | ✔ |
| Assegnare ruolo SUPERADMIN | ✗ | ✔ |
| Vedere workspace nascosti | ✗ | ✔ |
| Scaricare/ripristinare backup workspace | ✗ | ✔ |
| Eliminare un workspace/database | ✗ | ✔ |
| Caricare tabelle normativa | ✗ | ✔ |
| Creare backup | ✔ | ✔ |
| Configurare moduli per altri utenti | ✔ | ✔ |
| Modificare parametri azienda | ✔ | ✔ |
Nella scheda di Modifica Utente esistono due sezioni distinte che governano cosa un utente può fare: la sezione "Privilegi Produzione" (riquadro lilla) e la sezione "Permessi del ruolo <X> in <workspace>" (riquadro arancio). Sono due meccanismi complementari, non alternativi: vengono valutati in AND sulle azioni a cui si applicano.
Quadro di confronto
| Caratteristica | Privilegi Produzione (lilla) | Permessi del ruolo (arancio) |
|---|---|---|
| Granularità | Per singolo utente | Per (workspace + ruolo base) |
| Salvataggio | Array privileges sulla tabella Users |
Tabella dedicata WorkspaceRolePermission |
| Quante chiavi | 3 | 31 (12 ADMIN + 11 USER + 8 OPERATOR) |
| Su che ambito agisce | Solo modulo Produzione (distinte, ordini, ECO, qualità) | Tutti i moduli (utenti, documenti, magazzino, anagrafiche, catalogo, parametri, corrispettivi, scadenze, produzione, audit, backup…) |
| Chi può modificarli | SUPERADMIN e ADMIN | Solo SUPERADMIN |
| Effetto della modifica | Vale solo per l'utente mostrato | Vale per tutti gli utenti dello stesso ruolo nello stesso workspace |
| Default per utente nuovo | Tutti i privilegi a off (vanno assegnati esplicitamente) | Tutti i permessi a on (retrocompatibilità) |
| Bypass | SUPERADMIN e ADMIN bypassano sempre i controlli di privilegio | Solo SUPERADMIN bypassa |
A cosa serve la sezione "Privilegi Produzione" (lilla)
Implementa la Separation of Duties del modulo Produzione: assegna a singoli utenti uno dei 3 ruoli applicativi della produzione, indipendentemente dal loro ruolo base USER / OPERATOR / ADMIN.
| Privilegio | Cosa abilita |
|---|---|
PRODUCTION_MANAGER |
Creare e modificare distinte; avviare, completare, annullare ordini di produzione; applicare ECO; ripristinare elementi dal cestino produzione. |
QUALITY_MANAGER |
Approvare e respingere ECO (su utenti diversi dal proponente); registrare e forzare l'esito dei test qualità. |
OPERATOR_PROD |
Avviare e chiudere le singole fasi di lavorazione sui propri ordini. |
Tipico caso d'uso: in uno stesso workspace ci sono più collaboratori USER, ognuno con un compito diverso in
produzione. Mario è addetto qualità e riceve QUALITY_MANAGER; Luigi è magazziniere/operatore
e riceve OPERATOR_PROD; Giovanni è il responsabile di reparto e riceve PRODUCTION_MANAGER.
Senza questi privilegi un USER non può toccare nulla in produzione.
I privilegi sono inoltre la base tecnica della Separation of Duties: chi propone un ECO non può approvarlo, e questo controllo si appoggia proprio al fatto che proponente e approvatore siano due utenti distinti, ciascuno con il proprio privilegio individuale.
A cosa serve la sezione "Permessi del ruolo" (arancio)
Permette al SUPERADMIN di disabilitare per l'intero workspace e l'intero ruolo alcune azioni già
consentite di default. Esempio: nel workspace "Studio Bianchi" il SUPERADMIN decide che gli ADMIN non possano
modificare i pacchetti licenza né eseguire backup manuali; basta togliere il segno di spunta a
pacchetti.modifica e backup.esegui: la modifica vale per tutti gli ADMIN di quel
workspace presenti e futuri.
/admin/permessi-ruolo) si possono modificare i permessi di un ruolo per qualsiasi workspace
anche senza un utente "campione" già esistente — utile su workspace appena creati. Bottoni "Abilita tutti" /
"Disabilita tutti" per cambio bulk veloce. Ogni modifica viene tracciata in audit_log
(azione UPDATE_WORKSPACE_ROLE_PERMISSIONS) con utente, timestamp, IP, snapshot prima/dopo.
Le 31 chiavi disponibili coprono creazione/modifica/cancellazione di documenti, anagrafiche, catalogo, magazzino, corrispettivi, scadenze; emissione documenti; ripristino dal cestino; approvazione ECO e completamento ordini di produzione; registrazione test qualità; consultazione audit log; backup. Il default per ogni nuovo workspace è tutto abilitato, in modo che il comportamento storico non cambi finché il SUPERADMIN non interviene.
Come si combinano (regola pratica)
Esempio — completare un ordine di produzione:
- L'utente deve avere il privilegio individuale
PRODUCTION_MANAGER(o essere ADMIN/SUPERADMIN). - Il permesso del suo ruolo
produzione.ordini.completadeve essere abilitato in quel workspace. - Deve fornire la firma elettronica (password) richiesta dal flusso.
Quando usare uno o l'altro
- Vuoi specializzare un singolo utente (Mario fa solo qualità)? → Privilegi Produzione.
- Vuoi vietare un'azione a tutti gli ADMIN di un'azienda (es. Studio Verdi)? → Permessi del ruolo.
- Vuoi un'azione per pochi (es. solo 2 USER su 5) con regole produzione? → combina i due: assegna il privilegio solo ai 2 USER e tieni acceso il permesso ruolo.
- Vuoi spegnere completamente l'audit log per gli ADMIN di un workspace? → Permessi del ruolo:
audit.consulta = off.
Fare clic su un utente nell'elenco per aprire la scheda di modifica. La schermata è organizzata in sezioni:
Intestazione
Avatar con colore del ruolo, nome completo, @username, badge ruolo cliccabile (per ADMIN), toggle Attivo/Inattivo.
Riquadro Account
| Campo | Icona | Note |
|---|---|---|
| Username | lock | Bloccato dopo la creazione (non modificabile). Bordo rosso per evidenziare. |
| Validazione formato email | ||
| Nome | face | Max 50 caratteri |
| Cognome | draw | Max 50 caratteri |
Sotto il riquadro: pulsante Cambia Password (o “Reset Password” se si sta modificando un altro utente) e, solo per ADMIN, i pulsanti Statistiche Database e Operazioni Avanzate.
Sezione Workspace
Selettore “Ambiente attualmente in uso” per il workspace primario. Per ADMIN: sezione multi-workspace con checkbox per assegnare l'utente a più ambienti. Opzione speciale ___NUOVO___ per creare un workspace al volo.
Sezione Moduli Abilitati
Vedere sezione 9 per i dettagli completi.
Barra azioni
- Disattiva Utente (rosso): disabilita l'account (non è possibile disattivare sé stessi)
- Annulla: scarta le modifiche
- Salva Modifiche: salva tutti i cambiamenti (disabilitato se nulla è cambiato)
Ogni utente può accedere al proprio profilo dal menu utente nella topbar → “Profilo”.
Il profilo personale mostra tre card:
Informazioni Account
- Username: modificabile (min. 3 caratteri)
- Email: con validazione formato
- Ruolo: sola lettura (solo SUPERADMIN può modificare il proprio ruolo)
Dati Anagrafici
- Nome e Cognome (max 50 caratteri ciascuno)
Sicurezza
- Password attuale: obbligatoria per verificare l'identità
- Nuova password: minimo 6 caratteri
- Conferma nuova password: deve corrispondere
I campi password sono opzionali: compilare solo se si desidera cambiare la password.
Cambiare la propria password
- Accedere al proprio Profilo dalla topbar.
- Nella sezione “Sicurezza”, inserire la password attuale (per verifica identità).
- Inserire la nuova password (minimo 6 caratteri).
- Inserire la conferma (deve corrispondere).
- Premere Salva Modifiche.
Reset password di un altro utente (solo ADMIN)
- Aprire la scheda dell'utente dall'elenco.
- Premere “Reset Password”.
- Si apre una modale: inserire la nuova password e la conferma.
- Non serve la password attuale dell'utente (l'ADMIN è autorizzato al reset).
- Premere Salva Password.
Ogni workspace corrisponde a un database PostgreSQL separato. Permette di gestire più aziende, sedi o ambienti (produzione, test, demo) dalla stessa installazione.
Workspace primario
Il dropdown “Ambiente attualmente in uso” nella scheda utente seleziona il workspace che l'utente vede al login. L'utente può cambiare workspace dalla topbar (icona storage).
Multi-workspace (solo ADMIN)
La sezione “Ambienti Assegnati” mostra tutti i workspace disponibili con checkbox. Per configurare:
- Nel selettore “Seleziona utente”, scegliere l'utente da configurare.
- Sotto, attivare le checkbox dei workspace a cui l'utente deve avere accesso.
- I workspace contrassegnati con lucchetto sono riservati al SUPERADMIN.
- I workspace con icona occhio barrato sono nascosti (visibili solo ai SUPERADMIN).
- Le modifiche vengono salvate automaticamente alla selezione.
Creare un nuovo workspace
Nel dropdown workspace, selezionare l'opzione “+ Crea nuovo ambiente”. Viene creato un database vuoto pronto per essere configurato.
La sezione “Moduli Abilitati” consente di personalizzare quali voci del menu laterale sono visibili per ciascun utente in ciascun workspace.
Come configurare
- Nella scheda utente, scorrere alla sezione “Moduli Abilitati”.
- Selezionare l'utente e il workspace di riferimento dai dropdown.
- I moduli sono raggruppati in 8 categorie (accordion espandibile).
- Per ogni categoria: toggle per nascondere l'intero gruppo dal menu, e pulsante per abilitare/disabilitare tutti i moduli del gruppo.
- Dentro ogni gruppo: toggle individuale per ogni modulo con nome, icona e descrizione.
- Le modifiche vengono salvate automaticamente.
Toggle bloccato o sbloccato — come capire perché
Ogni toggle può trovarsi in uno di questi stati:
| Stato | Significato | Esempio |
|---|---|---|
| 🔒 Bloccato | Il modulo è indispensabile (fa parte del core sistema o è richiesto dal regime fiscale). Non si può disattivare. | Dashboard, Parametri, Soggetti, Documenti. Anche Registri IVA se l'azienda è in regime ordinario. |
| ✅ Libero | L'admin decide. Utile quando un modulo «sulla carta obbligatorio» in realtà non serve al tipo di attività. | Listini/Magazzino/Spedizioni per un consulente, Registri IVA per un naturopata forfettario. |
Categorie di moduli
| Gruppo | Moduli inclusi |
|---|---|
| Ciclo Attivo / Passivo | Soggetti, Catalogo, Documenti, Scadenzario, Agenti, Spedizioni, Lettere intento, Listini, Sconti, CRM, RDO, Valutazione fornitori (13 moduli) |
| Magazzino | Giacenze e movimenti |
| Contabilità | Piano dei Conti, Prima Nota, Registro IVA, Aliquote IVA, Bilancio, Budget, Riconciliazione, F24 (8 moduli) |
| Reporting | Dashboard analitica, Statistiche catalogo |
| HR & Personale | Dipendenti, Presenze, Ferie, Payroll, Note spese (5 moduli) |
| Integrazioni | SDI, Sistema TS, Corrispettivi, Conservazione, PEC, PSD2, E-commerce, API, Firma digitale, Email, Notifiche (11 moduli) |
| Documentale | GDPR, Archiviazione, Audit trail, Import/Export (4 moduli) |
| Impostazioni | Utenti, Parametri, Tabelle, Backup, Print Designer, Modelli stampa, Numerazioni (7 moduli) |
Opzioni globali
- Menu espanso: i sottomenu restano aperti di default
- Nascondi intestazioni gruppo: menu piatto senza raggruppamenti
- Nascondi “Coming Soon”: nasconde i moduli non ancora disponibili
Il pulsante “Statistiche Database” (solo ADMIN) nella scheda utente apre una finestra di dialogo con i conteggi dei record per tabella nel workspace selezionato.
Informazioni visualizzate
- KPI: totale record, tabelle attive (con almeno 1 record), massimo record per tabella
- Griglia: lista di tutte le tabelle con barra grafica proporzionale e conteggio
- Timestamp: ora dell'ultimo aggiornamento
- Pulsante Aggiorna per ricaricare i dati
Utile per verificare lo stato del database, controllare che i dati demo siano stati caricati o individuare tabelle vuote da popolare.
Il pulsante “Operazioni Avanzate” (solo ADMIN) apre un pannello con gestione avanzata dei workspace:
Selezione workspace
Lista di tutti i workspace disponibili. Fare clic per selezionare e visualizzare le operazioni disponibili.
Backup
- Crea Backup Ora: genera un backup del workspace selezionato
- Lista backup: elenco con data, dimensione, pulsanti scarica/ripristina/elimina
- ADMIN: può solo creare backup. SUPERADMIN: può anche scaricare, ripristinare ed eliminare.
Dati Demo
Pulsante “Carica Dati Demo” per aprire la procedura guidata (vedere sezione 12).
Zona Pericolosa (solo SUPERADMIN, workspace non-default)
Procedura di eliminazione workspace in 3 passaggi con doppia conferma. Elimina definitivamente il database e tutti i dati contenuti.
La procedura guidata “Dati Demo” consente di popolare un workspace con dati di esempio o con le tabelle normative ufficiali italiane.
Tab “Carica Demo”
Wizard a 3 step per generare dati realistici:
- Scegli archivio: Soggetti (anagrafe) o Catalogo (articoli)
- Scegli categoria: es. Clienti, Fornitori, Agenti, Farmaci, Articoli, Kit, ecc.
- Scegli quantità: preset rapidi (10, 50, 100, 500, 1.000) o valore personalizzato fino a 100.000
I dati generati sono realistici: nomi, indirizzi, P.IVA, CF, codici articolo, prezzi, categorie.
Tab “Tabelle Normativa”
Carica le tabelle ufficiali dell'Agenzia delle Entrate / INPS / SDI:
- Tipi Pagamento (codici SDI)
- Condizioni Pagamento
- Tipi Documento (TD01-TD28)
- Formati Trasmissione (FPR12, FPA12)
- Regimi Fiscali (RF01-RF19)
- Tipi Cassa Previdenza (TC01-TC22)
- Nature IVA (N1-N7 con sottotipi)
L'operazione è idempotente: aggiorna i record esistenti e inserisce quelli mancanti senza creare duplicati.
Tab “Svuota Archivi”
Zona pericolosa per svuotare tabelle selezionate. Richiede conferma esplicita. Mostra il conteggio dei record eliminati per archivio.
Disattivare
Il toggle Attivo/Inattivo nella scheda utente disabilita l'account senza eliminarlo. Un utente disattivato non può effettuare il login ma i suoi dati e le sue associazioni restano nel sistema.
- Non è possibile disattivare sé stessi
- La disattivazione è reversibile: riattivare con lo stesso toggle
Eliminare
Il pulsante Elimina (cestino) nell'elenco utenti rimuove definitivamente l'account.
| Ruolo dell'utente da eliminare | Chi può eliminare | Conferma richiesta |
|---|---|---|
| USER / OPERATOR | Qualsiasi ADMIN | Conferma semplice |
| ADMIN | ADMIN o SUPERADMIN | Digitare il nome completo dell'utente per confermare |
| SUPERADMIN | Solo SUPERADMIN | Digitare il nome completo dell'utente per confermare |
La pagina /admin/sistema raccoglie le funzioni di manutenzione tecnica del prodotto, accessibili
solo al Super Amministratore. Si raggiunge dal menu utente in topbar » Amministrazione Sistema.
| Card | Funzione | Note |
|---|---|---|
| Versione Applicazione | Modifica del numero di versione (semver MAJOR.MINOR.PATCH) mostrato in tutta la piattaforma. | Modale "odometro" con incremento singolo per cifra. |
| Pacchetti Licenza | Apre /admin/pacchetti: abilita/disabilita i pacchetti di moduli per ciascun workspace. |
Funzione esistente, ora raggiungibile dall'hub. |
| Permessi per Ruolo | Apre /admin/permessi-ruolo: configura i permessi di ADMIN/USER/OPERATOR per qualsiasi workspace senza dover passare da un utente esistente. |
2 selettori (workspace + ruolo) + griglia di card con i 31 permessi. Bottoni "Abilita tutti" / "Disabilita tutti". Cambio audit-tracciato in audit_log. |
| Backup & Ripristino | Apre la pagina Backup esistente (/backup): backup manuali, scarica, ripristina, importa. |
Funzione esistente. |
| Dati Demo | Carica un dataset di esempio in un workspace (selezionabile da dropdown nella card). | Apre il dialog SeedDemo già esistente, passandogli il workspace selezionato. |
/utenti/modifica/:id) è organizzata in 4 schede:
- Profilo & Workspace — account/anagrafica + database di lavoro
- Privilegi Produzione — visibile solo se per quell'utente la Distinta Base è abilitata
- Permessi del Ruolo — griglia configurabile (mostra placeholder se ruolo è SUPERADMIN o workspace non selezionato)
- Moduli abilitati — accordion per categoria (immutato)
Aggiornamenti alla gestione utenti, workspace e permessi.
Sync target per-workspace
In Modifica Utente → Database di Lavoro, accanto a ogni workspace abilitato, compare un selettore “Sync target” (visibile solo ai SuperAdmin). Permette di indicare il workspace di replica automatica: qualsiasi generazione XML o documento nel workspace sorgente viene replicato su quello target.
menuConfig per-workspace
I moduli abilitati (menu laterale visibile all'utente) non sono più configurati a livello utente ma a livello workspace. La configurazione viene salvata su Parametri.menuConfig invece che su User.menuConfig.
- Ogni workspace ha il proprio set di moduli attivi (Scadenzario on/off, Magazzino on/off, ecc.)
- Tutti gli utenti che accedono a quel workspace vedono lo stesso menu
- L'impostazione sostituisce quella per-utente precedente (migrazione automatica al primo accesso)
Scudo colorato per riservataSuper
Il bottone di accesso alla sezione riservata SuperAdmin (pulsante con icona scudo) è ora più evidente: colore ambra e bordo gold, per distinguerlo visivamente dai bottoni standard e ridurre errori di accesso.
Ogni tentativo di autenticazione è persistito nella tabella log_accessi_utente con IP, user-agent, workspace, timestamp.
Eventi tracciati
| Evento | Quando | Dati raccolti |
|---|---|---|
| LOGIN_OK | Autenticazione riuscita | userId, username, IP, user-agent, workspaceId |
| LOGIN_FAIL | Password errata o utente non trovato | username (se presente), IP, user-agent, details |
| LOGOUT | Logout esplicito (futuro) | userId, ora |
| PWD_CHANGE | Cambio password (futuro) | userId, operatore |
| ROLE_CHANGE | Cambio ruolo (futuro) | userId, ruolo vecchio/nuovo, operatore |
La cancellazione di un utente non rimuove il record fisicamente: imposta isActive=false + cancellatoIl.
Motivazione
- Preservare la storia accessi per audit e compliance
- Mantenere traccia delle modifiche effettuate da quell'utente in passato
- Evitare broken references su log modifiche di altre tabelle
Ripristino
Solo gli ADMIN possono ripristinare tramite POST /api/utenti/:id/ripristina. Viene riattivato con isActive=true.
Endpoint GET /api/utenti/_/accessi-recenti (ADMIN) consente il monitoring degli accessi recenti con filtri.
| Parametro | Valore | Esempio d'uso |
|---|---|---|
| evento | LOGIN_OK, LOGIN_FAIL, LOGOUT | individuare tentativi falliti |
| limit | Numero massimo righe | default 200 |
Integrabile in un cruscotto di sicurezza per rilevare pattern anomali (tentativi falliti consecutivi, IP sospetti, orari inusuali).
Tabella log_modifiche_utente per tracciare cambi di ruolo, email, attivazione, password.
Endpoint: GET /api/utenti/:id/audit-log. Filtra le ultime 100 modifiche per utente specifico.
Tre ruoli applicati uniformemente su tutti i moduli della piattaforma.
| Ruolo | Privilegi tipici | Middleware |
|---|---|---|
| SUPERADMIN | Tutto + gestione altri SUPERADMIN + workspace | requireAdmin + ulteriori check |
| ADMIN | Operazioni distruttive, bulk, definitivo, storno | requireAdmin |
| OPERATORE | Lettura + mutazioni standard | authMiddleware |
L'uniformità è verificata dalla regressione API: ogni endpoint distruttivo o bulk ritorna 403 se chiamato da utente non-admin.
Protezione contro attacchi brute-force: dopo 5 tentativi di login falliti consecutivi per lo stesso username, l'account è bloccato automaticamente per 15 minuti.
Meccanismo
- Il controllo viene eseguito prima della validazione password sul tentativo di login
- Si conteggiano i record
LOGIN_FAILconsecutivi a partire dall'ultimoLOGIN_OK(o da qualsiasi evento negli ultimi 15 minuti) - Al raggiungimento della soglia, il server risponde
HTTP 429 Too Many Requestscon campolockedUntil - Il blocco genera un evento
LOGIN_BLOCKEDnel log accessi (monitoraggio centralizzato)
Costanti configurabili
| Costante | Valore di default | Significato |
|---|---|---|
LOGIN_FAIL_THRESHOLD | 5 | Tentativi falliti prima del blocco |
LOGIN_LOCK_MINUTES | 15 | Durata del blocco (minuti) |
Esempio risposta 429
{
"error": "Account bloccato per 15 minuti dopo 5 tentativi falliti. Riprovare più tardi o contattare l'amministratore.",
"lockedUntil": "2026-04-19T14:35:00.000Z"
}
Sblocco amministrativo
Un ADMIN può sbloccare manualmente un account inserendo un record LOGIN_OK manuale nel database oppure attendendo lo scadere della finestra temporale.
Autenticazione a due fattori basata su TOTP time-based one-time password (RFC 6238), compatibile con Google Authenticator, Authy, 1Password, Microsoft Authenticator.
Setup
- L\'utente chiama
POST /api/2fa/setup→ il server genera un secret (base32) e restituisce l\'URIotpauth://per QR code - L\'utente scansiona il QR con l\'app authenticator
- L\'utente chiama
POST /api/2fa/verifycon il codice a 6 cifre visualizzato → attivazione effettiva - Il server restituisce 10 backup codes (formato
XXXX-XXXX) da salvare in luogo sicuro
Endpoint disponibili
| Metodo | Path | Descrizione |
|---|---|---|
| POST | /api/2fa/setup | Inizia setup (genera secret + QR URI) |
| POST | /api/2fa/verify | Verifica codice TOTP + attiva + restituisce backup codes |
| POST | /api/2fa/disable | Disattiva (richiede codice TOTP O password) |
| GET | /api/2fa/status | Stato attuale (attivo + count backup codes restanti) |
| POST | /api/2fa/rigenera-backup-codes | Rigenera i 10 codici di recupero |
Parametri TOTP
- Algoritmo: HMAC-SHA1 (standard RFC 6238)
- Periodo: 30 secondi
- Cifre: 6
- Window: ±1 step (tolleranza ±30 secondi per drift clock)
Backup codes
- 10 codici monouso formato
XXXX-XXXX - Salvati in DB solo come SHA-256 (mai in chiaro)
- Ogni codice è consumabile una sola volta (rimosso dopo l\'uso)
- Rigenerazione con
/api/2fa/rigenera-backup-codesinvalida tutti i precedenti
twofa.routes.js usando solo il modulo crypto di Node.verificaTotp() come helper ma la richiesta interattiva al login è pianificata v 2.3.Sistema di refresh token rotation per bilanciare sicurezza (access token brevi) e UX (sessioni lunghe senza richiedere login ripetuto).
Struttura
- Access token (JWT): TTL 1 ora, contiene id/role/username
- Refresh token: TTL 30 giorni, stringa random 96 caratteri (48 bytes hex)
- Persistenza in tabella
refresh_tokens: token, userId, issuedAt, expiresAt, revokedAt, replacedBy, IP, userAgent
Endpoint
| Metodo | Path | Descrizione |
|---|---|---|
| POST | /api/auth/refresh | Ottiene nuovo access + refresh token (rotation) |
| POST | /api/auth/logout | Revoca il refresh token corrente |
| POST | /api/auth/logout-all | Revoca tutti i refresh token dell\'utente |
| GET | /api/auth/sessions | Lista sessioni attive (IP, user-agent, issuedAt) |
Token rotation (sicurezza)
Quando il client chiama /refresh con il refresh token corrente:
- Il server verifica che non sia revocato e non sia scaduto
- Revoca il vecchio token con
revokedReason='rotated'ereplacedBy=<nuovo> - Emette un nuovo refresh token + nuovo access token
- Logga evento
TOKEN_REFRESHin log accessi
Questo schema permette di rilevare token compromessi: se un attaccante rubà un refresh token e lo usa, l\'utente legittimo al prossimo refresh troverà il suo token revocato.
Auto-disconnessione
Un ADMIN può forzare la disconnessione di un utente da tutti i dispositivi con /api/auth/logout-all: utile in caso di smarrimento credenziali o licenziamento.
/api/auth/login è pianificata v 2.3. Il backend espone emettiRefreshToken() come helper.La visibilità di un modulo viene decisa da tre livelli indipendenti in intersezione:
| Livello | Dominio | Chi configura | Granularità |
|---|---|---|---|
| 1. Pacchetto (licenza) | Workspace | SUPERADMIN piattaforma | 7 pacchetti: BASE, FATTURAZIONE, MAGAZZINO, CONTABILITA, CORRISPETTIVI, VENDITE_B2B, SISTEMA_TS |
| 2. Profilo Attività | Workspace | Admin cliente (Dati Aziendali) | 12 profili: STUDIO_MEDICO, FARMACIA, COMMERCIALISTA, FERRAMENTA... |
| 3. Permesso Utente | Utente | Admin cliente (Modifica Utente) | Toggle per singolo modulo |
Regola di intersezione
Il modulo è visibile all'utente se e solo se:
modulo_visibile(utente, workspace, modulo) = pacchetto_attivo(workspace, pacchetto_di(modulo)) (livello 1) AND profilo_compatibile(workspace.profilo, modulo) (livello 2) AND utente_abilitato(utente.menuConfig, modulo) (livello 3)
Backend
- Helper:
services/modulo-access.service.js → moduliVisibili() - Middleware:
richiedeModulo('<moduloKey>')ritorna 403 con messaggio esplicativo - API:
GET /api/me/moduli-attiviper il frontend - API:
GET /api/pacchetti/workspace/:wsId/moduli-lecitiper Modifica Utente
UI impattate
- Admin/Pacchetti (
/admin/pacchetti, solo SUPERADMIN): toggle sui 7 pacchetti per workspace. BASE sempre attivo. - Parametri → Dati Aziendali → Profilo Attività: al cambio profilo, un box mostra moduli auto-attivati e moduli nascosti con motivazione.
- Modifica Utente → Moduli: i toggle dei moduli bloccati da pacchetto o profilo appaiono disabilitati, barrati, con badge BLOCCATO e tooltip esplicativo.
- Sidebar/Topbar:
AuthService.isMenuEnabled()applica automaticamente i filtri 1+2 prima del 3.
Tabelle DB
pacchetti_workspace: pacchetti attivi per workspace (auditato con attivato_il/da, disattivato_il/da)moduli_catalogo: 25 moduli mappati al pacchetto di appartenenzaprofili_moduli_preset: per ciascun profilo, quali moduli sono rilevanti e con quale motivazione