diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 2709117..345c60e 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -2,13 +2,14 @@ import { useState } from 'react';
import { InventoryPage } from './pages/InventoryPage';
import './app-shell.css';
-type TabKey = 'overview' | 'inventory' | 'discovery' | 'topology' | 'wip';
+type TabKey = 'overview' | 'inventory' | 'discovery' | 'topology' | 'options' | 'wip';
const tabs: { key: TabKey; label: string; description: string }[] = [
{ key: 'overview', label: 'Overview', description: 'Stato generale del workspace NetMapper.' },
{ key: 'inventory', label: 'Inventory', description: 'Tree fisico/logico e navigazione tra oggetti.' },
{ key: 'discovery', label: 'Discovery', description: 'Pipeline e job di raccolta dati.' },
{ key: 'topology', label: 'Topology', description: 'Vista futura della mappa multilivello.' },
+ { key: 'options', label: 'Options', description: 'Utenti, impostazioni, servizi di sistema e sicurezza.' },
{ key: 'wip', label: 'WIP', description: 'Blocchi provvisori, note e parti in corso.' },
];
@@ -35,16 +36,16 @@ function OverviewTab() {
- - Reintegro layout persistente.
- - Tab dedicate per viste future.
+ - Reintegro layout persistente completato.
+ - Roadmap di security e options introdotta.
- Preparazione vista topology multilivello.
- - La discovery avanzata è ancora in fase iniziale.
- - I badge e il contesto nodo sono MVP, non finali.
- - Serve reintegro progressivo delle sezioni storiche.
+ - I moduli servizi confluiranno nel menu Options.
+ - L'accesso dovrà essere autenticato prima delle integrazioni remote.
+ - Serve hardening progressivo di sessione e permessi.
@@ -93,6 +94,72 @@ function TopologyTab() {
);
}
+function OptionsTab() {
+ return (
+
+
+
+
+ - Utenti locali e ruoli applicativi.
+ - Disattivazione account inattivi o non più autorizzati.
+ - Storico accessi e audit trail amministrativo.
+
+
+
+
+ - Parametri workspace e branding dell'istanza.
+ - Configurazione discovery, inventory e policy future.
+ - Feature flags per moduli sperimentali.
+
+
+
+
+
+
+
+ - La sezione Servizi viene assorbita nel menu Options.
+ - Qui confluiranno terminale remoto, job runner e integrazioni di sistema.
+ - Ogni funzione sensibile dovrà essere protetta da permessi espliciti.
+
+
+
+
+ - Login obbligatorio per tutte le viste non pubbliche.
+ - MFA per admin e per funzioni ad alto impatto.
+ - Controlli server-side su ogni richiesta, deny-by-default e audit centralizzato.
+
+
+
+
+
+
+
+
1
+
+
Authentication foundation
+
Sessioni sicure, logout reale, protezione delle rotte e bootstrap identità all'avvio.
+
+
+
+
2
+
+
Authorization model
+
Ruoli base, policy per risorse sensibili e blocco di azioni per utenti non autorizzati.
+
+
+
+
3
+
+
Remote access hardening
+
Prima di un modulo tipo Termix: MFA, audit, approvazione esplicita e tracciamento comandi.
+
+
+
+
+
+ );
+}
+
function WipTab() {
return (
@@ -105,8 +172,8 @@ function WipTab() {
- - Non rimuovere più la shell quando si aggiungono nuove viste.
- - Le nuove sezioni devono entrare come tab del workspace.
+ - Le nuove funzioni sensibili passano da Options.
+ - Inventory resta il book of truth, ma protetto da auth futura.
- Persistenza dello stato UI da migliorare nei prossimi step.
@@ -145,7 +212,7 @@ function App() {
MVP
Inventory online
- WIP restored
+ Options added
@@ -156,8 +223,8 @@ function App() {
{currentTab.description}
- LXC ready
- Docker-ready base
+ Book of truth
+ Auth roadmap
@@ -173,6 +240,9 @@ function App() {
+
diff --git a/frontend/src/app-shell.css b/frontend/src/app-shell.css
index d1e6e43..a22ad5f 100644
--- a/frontend/src/app-shell.css
+++ b/frontend/src/app-shell.css
@@ -126,6 +126,11 @@ body {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
+.shell-stack {
+ display: grid;
+ gap: 16px;
+}
+
.shell-card {
background: rgba(17, 24, 39, 0.88);
border: 1px solid rgba(255,255,255,0.08);
@@ -153,6 +158,38 @@ body {
color: #cbd5e1;
}
+.options-roadmap {
+ display: grid;
+ gap: 12px;
+}
+
+.options-roadmap-item {
+ display: grid;
+ grid-template-columns: 40px minmax(0, 1fr);
+ gap: 12px;
+ align-items: start;
+ padding: 12px;
+ border-radius: 12px;
+ background: rgba(255,255,255,0.03);
+ border: 1px solid rgba(255,255,255,0.06);
+}
+
+.options-roadmap-item p {
+ margin: 6px 0 0;
+ color: #94a3b8;
+}
+
+.options-step {
+ width: 32px;
+ height: 32px;
+ border-radius: 999px;
+ display: grid;
+ place-items: center;
+ background: rgba(37, 99, 235, 0.18);
+ color: #bfdbfe;
+ font-weight: 700;
+}
+
@media (max-width: 1100px) {
.app-shell {
grid-template-columns: 1fr;