### Task 11: Nav admin per 3 ruoli e blog filtrato per autore **Files:** - Modify: `src/layouts/Admin.astro` - Modify: `src/pages/admin/index.astro` **Interfaces:** - Consumes: `listAllPosts`, `listByAuthor` (posts.ts), `listUsers` (auth.ts), `Astro.locals.user`. - [ ] **Step 1: Nav admin per ruolo** In `src/layouts/Admin.astro`, sostituisci le due righe dentro `` (righe ~34-35) con: ```astro {user && ( <> {`Ciao, ${user.username}`} Articoli {(user.role === 'superuser' || user.role === 'admin') && Contenuti} {user.role === 'admin' && Utenti} Nuovo Esci Vedi sito ↗ )} ``` - [ ] **Step 2: Blog admin filtrato + colonna autore** Sostituisci il frontmatter di `src/pages/admin/index.astro`: ```astro --- import Admin from '../../layouts/Admin.astro'; import { getDb } from '../../lib/db'; import { listAllPosts, listByAuthor } from '../../lib/posts'; import { listUsers } from '../../lib/auth'; export const prerender = false; const user = Astro.locals.user!; const isManager = user.role === 'superuser' || user.role === 'admin'; const posts = isManager ? listAllPosts(getDb()) : listByAuthor(getDb(), user.id); const nameById = new Map(listUsers(getDb()).map((u) => [u.id, u.username])); const fmt = new Intl.DateTimeFormat('it-IT', { dateStyle: 'short', timeStyle: 'short' }); --- ``` Nella `` aggiungi la colonna Autore solo per i manager, e nella riga il valore. Sostituisci la tabella: ```astro {isManager && } {posts.map((p) => ( {isManager && } ))}
TitoloCategoriaAutoreStatoAggiornato
{p.title} {p.category}{p.author_id ? (nameById.get(p.author_id) ?? 'Staff InsanityLab') : 'Staff InsanityLab'}{p.draft ? 'Bozza' : 'Pubblicato'} {fmt.format(new Date(p.updated_at.replace(' ', 'T') + 'Z'))}
``` - [ ] **Step 3: Verifica build** Run: `npm run build` Expected: build OK. - [ ] **Step 4: Commit** ```bash git add src/layouts/Admin.astro src/pages/admin/index.astro git commit -m "feat(admin): nav per 3 ruoli, blog filtrato per autore + colonna autore" ``` ---