diff --git a/HANDOFF.md b/HANDOFF.md index f36a1d6..67e37c9 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -147,6 +147,40 @@ assistente e operatore); creazione/modifica/cestino restano su `territori.manage sono sotto `@can('territori.manage')`; il link "Dettaglio" resta visibile a tutti. Il menu laterale mostra "Territori" a chi ha `territori.assign`. +### Sola lettura per proclamatori e campagne (non-admin) + +Stessa impostazione dei territori estesa ad altre due sezioni: + +- **Proclamatori**: `index` e `show` restano su `proclamatori.manage` (l'assistente + li vede in sola lettura); `create`/`edit`/`cestino` e tutte le mutazioni + (`ProclamatoreIndex::toggleActive`/`deleteProclamatore`/`anonimizza`, + `ProclamatoreCreate::save`, `ProclamatoreEdit::save`, + `ProclamatoreCestino::restore`/`forceDelete`) richiedono `settings.manage`. + `ProclamatoreIndex` è servito da una rotta rilassata, quindi i suoi metodi di + mutazione hanno il check interno; i pulsanti in `proclamatore-index`/`-show`/ + `-cestino` sono sotto `@can('settings.manage')`. Le rotte letterali + create/cestino restano prima del wildcard `{proclamatore}`. +- **Campagne**: la **creazione** è ora admin-only come già modifica/eliminazione + — `CampagnaCreate::save` chiama `authorize('settings.manage')`, la rotta + `campagne/create` è nel gruppo `settings.manage` (registrata prima del + wildcard) e il pulsante "Nuova Campagna" è sotto `@can('settings.manage')`. + `index`/`show` restano su `campagne.manage` (sola lettura per l'assistente). + +### Tabelle-elenco responsive su mobile (portrait) + +Le liste principali usano una sola "politica" CSS invece di layout duplicati: +la classe `table-cards` (in `resources/css/app.css`) sotto `640px` nasconde il +`thead` e trasforma ogni riga in una scheda, con ogni cella resa come +"ETICHETTA … valore" (l'etichetta viene dall'attributo `data-label` della `