Console Moduli e Accessi¶
La console Moduli e Accessi centralizza le operazioni di abilitazione moduli, lettura canoni, policy menu e verifica della visibilita' effettiva.
URL operativo:
https://safeops.nxt-sense.eu/moduli-accessi/https://netopen.nxt-sense.eu/moduli-accessi/
La vecchia route /module-access-console/ non e' il riferimento operativo.
Accesso¶
La console e' disponibile su host amministrativo o netopen.nxt-sense.eu.
Gli utenti platform/super admin possono scegliere qualunque tenant attivo. Gli admin tenant possono accedere solo se hanno almeno un'assegnazione tenant attiva e vedono solo i tenant assegnati.
Se un utente non autenticato apre la pagina, viene mandato al login. Se un utente autenticato non ha i privilegi richiesti, riceve accesso negato.
Selezione tenant¶
Il selettore tenant determina il tenant su cui vengono lette e salvate le configurazioni operative:
- moduli tenant;
- servizi e canoni;
- policy menu tenant;
- anteprima menu effettivo.
Le righe policy marcate globale * sono ereditarie. La console le mostra per chiarezza, ma il tenant selezionato resta il contesto operativo principale.
Percorso utente tenant¶
Il pannello Percorso Utente Tenant mette in sequenza le operazioni per creare o completare un accesso tenant senza passaggi a memoria:
- aprire la lista Utenti globali filtrata per tenant;
- creare l'utente dalla modale Crea utente se non esiste ancora;
- collegare il tenant dal dettaglio utente;
- assegnare il profilo tenant corretto;
- impostare eventuali policy menu per ruolo, gruppo o utente;
- controllare i permessi view del ruolo;
- simulare il menu effettivo dell'utente prima di chiudere il ticket.
Il pannello mostra anche preset di riferimento:
admin_tenant: amministrazione del solo tenant;operatore_admin: operativita' con scrittura;tecnico: funzioni tecniche abilitate;readonly: sola consultazione.
Per i permessi view, la lettura corrisponde normalmente a can_list e can_show; la scrittura richiede permessi come can_add, can_edit e can_delete. Le azioni speciali (can_download, can_upload, can_export, can_action) vanno verificate singolarmente sulla view interessata.
La modale Crea utente richiede username, email e profilo tenant. Nome e cognome sono opzionali. La password temporanea puo' essere inserita dall'operatore oppure lasciata vuota: in quel caso viene generata automaticamente e mostrata una sola volta nel messaggio di conferma. Dopo la creazione la console torna sullo stesso tenant e seleziona l'utente nella simulazione menu.
Moduli tenant¶
Nel pannello Moduli Tenant sono disponibili tre azioni:
Attiva: abilita il modulo con statoactive;Read-only: abilita il modulo in sola lettura;Disattiva: disabilita il modulo con statodisabled.
Ogni azione richiede conferma browser e mantiene il contesto selezionato al ritorno pagina.
La tabella e' paginata lato client a 25 righe per pagina. Il filtro lavora sulle righe renderizzate e resetta la paginazione alla prima pagina.
Servizi e canoni¶
Il pannello Servizi e Canoni e' in sola lettura.
Mostra le sottoscrizioni collegate al tenant e lo stato operativo calcolato su:
is_active;- stato subscription;
- date di inizio/fine;
- prezzo concordato o prezzo default.
La tabella e' paginata lato client a 25 righe per pagina. Il filtro lavora sulle righe renderizzate e resetta la paginazione alla prima pagina.
Policy menu¶
Il pannello Policy Menu permette di creare o riattivare regole di visibilita' su tre ambiti:
- ruolo;
- gruppo;
- utente.
Le decisioni disponibili sono:
Mostra;Nascondi.
La console valida il soggetto prima del salvataggio:
- il ruolo deve esistere o essere
*; - il gruppo deve esistere;
- l'utente deve esistere ed essere attivo.
Il toggle di una policy puo' agire solo su righe globali * o righe del tenant selezionato.
Le tabelle policy per ruolo, gruppo e utente sono paginate lato client a 25 righe per pagina. Il filtro lavora sulle righe renderizzate e resetta la paginazione alla prima pagina.
Cestino menu/view¶
Il pannello Cestino Menu/View elenca voci legacy nascoste dal menu ma mantenute reversibili.
Stato iniziale:
Policy Menu;Policy Menu (Gruppi);Policy Menu (Utenti).
Queste CRUD tecniche restano registrate e raggiungibili via URL per fallback operativo, ma non compaiono piu' nel menu. La gestione ordinaria passa dal pannello Policy Menu della console.
Albero menu e menu effettivo¶
Il pannello Albero Menu e Menu Effettivo mostra la preview della visibilita' menu.
Puoi selezionare un utente nel campo Anteprima utente e premere Simula. Durante la simulazione compare Torna a me, che rimuove l'utente simulato e torna al contesto dell'utente corrente.
La preview conserva:
- tenant selezionato;
- ruolo permessi selezionato;
- utente simulato.
L'albero menu e' read-only e serve per vedere la gerarchia completa:
- sezioni principali;
- sottovoci;
- view finali;
- stato visibile/nascosto;
menu_key;- decisione policy o default runtime.
Usa i filtri dell'albero per cercare una voce, mostrare solo nascosti o mostrare solo voci non mappate. Selezionando un nodo compare il dettaglio laterale con percorso, URL, layer e decisione.

L'immagine mostra il controllo principale: a sinistra l'albero navigabile, in alto i filtri, a destra il dettaglio della voce selezionata. L'operatore deve partire dal badge visibile o nascosto, poi usare il dettaglio solo quando serve capire la causa.
Lettura consigliata per l'operatore:
- scegli il tenant;
- scegli l'utente da simulare, se devi verificare un caso specifico;
- apri Albero Menu e Menu Effettivo;
- cerca la voce segnalata dal ticket;
- controlla il badge
visibileonascosto; - se la voce e'
nascosto, apri il dettaglio e guarda se la causa arriva da policy, layer runtime o voce non mappata; - usa la tabella Menu Effettivo solo quando serve leggere tutte le colonne tecniche della stessa voce.
Interpretazione rapida:
visibile: la voce entra nel menu dell'utente simulato;nascosto: la voce non entra nel menu dell'utente simulato;policy: esiste una decisione esplicita che domina il comportamento runtime;non mappata: la voce non ha ancora unamenu_keystabile e va normalizzata prima di usarla come riferimento operativo;layer: indica quale livello ha prodotto la decisione finale.
L'albero non salva modifiche. Serve a capire cosa vede l'utente e a decidere quale policy o normalizzazione applicare nei pannelli successivi.
Quando e' selezionato un utente in Anteprima utente, il dettaglio del nodo permette anche di scrivere policy utente:
Attiva voce: mostra solo la voce selezionata per l'utente simulato;Disattiva voce: nasconde solo la voce selezionata per l'utente simulato;Attiva sottoalbero: mostra la voce selezionata e le relative sottovoci/foglie;Disattiva sottoalbero: nasconde la voce selezionata e le relative sottovoci/foglie.
Queste azioni non modificano i ruoli globali e non cambiano altri utenti. Scrivono righe nel perimetro Policy per utente del tenant selezionato.
La tabella Menu Effettivo e' paginata lato client a 25 righe per pagina e puo' essere limitata a un massimo prudente di righe renderizzate. Il filtro lavora sulle righe renderizzate e resetta la paginazione alla prima pagina.
Permessi view¶
Il pannello Permessi View e' in sola lettura.
Serve per controllare i permessi tecnici Flask-AppBuilder associati a un ruolo. Non modifica ruoli, permessi o view.
La tabella e' paginata lato client a 25 righe per pagina e il filtro lavora sulle righe renderizzate.
Voci da normalizzare¶
Il pannello Voci da Normalizzare evidenzia:
- menu key non mappate;
- voci su cui domina una decisione policy runtime.
Il badge mostra il totale reale delle voci rilevate. La tabella e' paginata lato client a 25 righe per pagina e puo' essere limitata a un massimo prudente di righe renderizzate per non appesantire la console; quando succede, il pannello indica quante righe sono mostrate e quante restano oltre il limite.
Questa sezione aiuta a stabilizzare progressivamente le chiavi menu.
Produzione¶
La console e' in produzione. Le modifiche devono restare incrementali:
- evitare refactor larghi senza test;
- non cambiare schema DB durante interventi UI;
- riavviare
safeops-web.servicesolo su richiesta esplicita; - validare sempre con test mirati e
mkdocs build --strictquando si tocca documentazione.
Checkpoint tecnico:
Tema tenant¶
La console Tema Tenant e' disponibile su /tema-tenant/. Gli amministratori di piattaforma e super admin su host console possono scegliere il tenant dal selettore globale. Il tenant admin puo' modificare solo il tema del tenant corrente risolto dal contesto host/sessione: eventuali tenant_key forzati in query string vengono ignorati. L'accesso e' protetto anche a livello route: senza sessione valida ritorna al login, mentre utenti non autorizzati ricevono 403. La variante senza slash /tema-tenant viene normalizzata su /tema-tenant/.
Permette di modificare in modo guidato i campi branding gia' presenti in tenant_registry:
- nome visualizzato;
- logo URL o upload immagine da dropzone;
- testo header;
- testo footer;
- colore primario;
- colore secondario;
- colore sidebar.
La pagina include validazione locale dei colori e una preview live di nome, header, footer, logo e palette. L'AI puo' proporre un testo breve per header/footer e una palette coerente partendo dal logo caricato nel dropzone; queste azioni compilano i campi ma non salvano automaticamente. Il logo caricato da dropzone accetta PNG, JPG o WebP fino a 2 MB e viene salvato in /static/tenant-logos/ solo quando si preme Salva tema. Il logo esistente puo' essere rimosso con il checkbox dedicato senza cancellare manualmente l'URL. Durante il salvataggio e le azioni AI la UI mostra lo stato Elaborazione....
Prima del salvataggio del logo vengono controllati localmente formato, peso, dimensioni minime 64x32px, dimensioni massime 2400x1200px e proporzioni non anomale. La verifica AI vision controlla che l'immagine sembri un logo/brand e non una foto, screenshot, documento o contenuto non adatto. Se la verifica AI segnala contenuto bloccante, il tema non viene salvato; se l'AI non e' disponibile, viene mostrato un warning e resta richiesto controllo manuale.
Il pulsante Verifica AI usa l'AI interna solo come controllo/consiglio: non salva dati, non carica file e non genera CSS libero.