From 03510d3940019aac001a28bf1c257fb1c2697852 Mon Sep 17 00:00:00 2001 From: AdrianoDev Date: Fri, 31 Jul 2026 16:28:35 +0200 Subject: [PATCH] Area riservata: menu essenziale e veste grafica del sito MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Il menu in alto si riduce alle voci che servono davvero — Articoli, Contenuti, Utenti, Sito, Esci — con la voce corrente evidenziata; ognuna resta visibile solo a chi ha il ruolo per aprirla, e in pagina di login la barra mostra il solo marchio. "Nuovo" esce dal menu perché il pulsante per creare un articolo è già in cima all'elenco Articoli. Il pannello smette di essere un foglio di stile a sé: adotta i font e la palette del sito, come Campus e Stress Index, con tabelle, pulsanti, campi e pillole di stato riportati allo stesso linguaggio. Co-Authored-By: Claude Opus 5 (1M context) --- src/layouts/Admin.astro | 160 ++++++++++++++++++++++++++-------- src/pages/admin/content.astro | 22 +++-- src/pages/admin/login.astro | 4 +- 3 files changed, 140 insertions(+), 46 deletions(-) diff --git a/src/layouts/Admin.astro b/src/layouts/Admin.astro index d76e45e..d1631c3 100644 --- a/src/layouts/Admin.astro +++ b/src/layouts/Admin.astro @@ -1,7 +1,28 @@ --- +// Layout dell'area riservata. Usa i token e i font del sito, come il Campus e Stress Index: +// il pannello non è più un foglio di stile a sé, così chi passa dal sito all'amministrazione +// resta nello stesso mondo visivo. +import '@fontsource/montserrat/400.css'; +import '@fontsource/montserrat/500.css'; +import '@fontsource/montserrat/600.css'; +import '@fontsource/open-sans/400.css'; +import '@fontsource/open-sans/600.css'; +import '../styles/global.css'; + interface Props { title: string } const { title } = Astro.props; const user = Astro.locals.user; +const path = Astro.url.pathname; +const isManager = user?.role === 'superuser' || user?.role === 'admin'; + +// Voci del menu: ognuna compare solo a chi può davvero aprirla. +const VOCI = [ + { href: '/admin', label: 'Articoli', visibile: true, exact: true }, + { href: '/admin/content', label: 'Contenuti', visibile: isManager }, + { href: '/admin/users', label: 'Utenti', visibile: user?.role === 'admin' }, +]; +const attiva = (v: { href: string; exact?: boolean }) => + v.exact ? path === v.href : path.startsWith(v.href); --- @@ -10,41 +31,110 @@ const user = Astro.locals.user; {title} — Admin InsanityLab - + - -
- InsanityLab · Admin - - {user && ( - <> - {`Ciao, ${user.username}`} - Articoli - {(user.role === 'superuser' || user.role === 'admin') && Contenuti} - {user.role === 'admin' && Utenti} - {user.role === 'admin' && Piattaforme} - Nuovo - Esci - Vedi sito ↗ - - )} - -
-
+ +
+ + InsanityLab + Area riservata + + + {user && ( + + )} + + {user &&

{user.username}

} +
+ +
+ + diff --git a/src/pages/admin/content.astro b/src/pages/admin/content.astro index 41ded06..1dd0d88 100644 --- a/src/pages/admin/content.astro +++ b/src/pages/admin/content.astro @@ -109,22 +109,26 @@ const allStyles = STYLE_GROUPS as Record;