Componenti

SpreadsheetAclDialog

Dialog per gestire le condivisioni (ACL) di un foglio. Aggiungi/modifica/rimuovi permessi lettura/scrittura per utente.

Scopo

Dialog modale per gestire le condivisioni del foglio. Visibile solo al proprietario (permessoEffettivo === 'proprietario').

Aperto da SpreadsheetToolbar (@openAcl). Gestita internamente da useFogliAcl.

Props

PropTipoDescrizione
idfolionumberID foglio di cui gestire le ACL
visiblebooleanv-model:visible per <Dialog>

Eventi

EventoPayloadQuando
update:visiblebooleanv-model emit per chiusura
acl-changedUna ACL è stata creata/modificata/rimossa

Operazioni

Tutte le operazioni passano per useFogliAcl:

AzioneImplementazione
Lista permessiacl.load(idfolio) al mount
Aggiungi utenteacl.aggiungi(idfolio, idutente, 'lettura' | 'scrittura')
Modifica permessoacl.modifica(idacl, nuovoPermesso)
Rimuovi permessoacl.rimuovi(idacl)

Modello FoglioAcl

interface FoglioAcl {
  idacl: number
  idfolio: number
  idutente: number
  permesso: 'lettura' | 'scrittura'
  datacreazione: string         // ISO 8601
  nomeUtente?: string           // join opzionale lato vista
}

Layout suggerito

┌─────────────────────────────────────────────────┐
│ Condivisione foglio                          ✕  │
├─────────────────────────────────────────────────┤
│                                                 │
│  Aggiungi utente:                               │
│  [Cerca utente ▼]   [Lettura ▼]   [+ Aggiungi]  │
│                                                 │
│  ─────────────────────────────────────────      │
│                                                 │
│  Utenti con accesso:                            │
│                                                 │
│  👤 marco.rossi      [Scrittura ▼]   [✕]        │
│     Condiviso il 02/05/2026                     │
│                                                 │
│  👤 giulia.bianchi   [Lettura ▼]     [✕]        │
│     Condiviso il 28/04/2026                     │
│                                                 │
│  ─────────────────────────────────────────      │
│                                                 │
│  ☐ Foglio pubblico (lettura per tutti)          │
│                                                 │
└─────────────────────────────────────────────────┘

Flusso "Aggiungi utente"

  1. Autocomplete su lista utenti (lookup esterno, non incluso nella libreria — il consumer fornisce la sorgente)
  2. Selezione permesso (lettura o scrittura)
  3. Click "+ Aggiungi"
  4. acl.aggiungi(idfolio, idutente, permesso)
  5. Riga aggiunta a acl.value reattivamente

Flusso "Modifica permesso"

  1. Click sul dropdown del permesso (lettura ↔ scrittura)
  2. acl.modifica(idacl, nuovoPermesso)
  3. La riga viene aggiornata reattivamente

Flusso "Rimuovi"

  1. Click sull'icona
  2. Conferma (confirm.require)
  3. acl.rimuovi(idacl)
  4. Riga rimossa da acl.value

Pubblicazione foglio

Il toggle "Foglio pubblico" è una scorciatoia per impostare foglidicalcolo.ispubblico = true. Quando attivo, il foglio è visibile in sola lettura a tutti gli utenti della shell, anche senza essere in foglidicalcoloacl. Gestito tramite FogliPostgrestService.aggiornaDati(idfolio, { ispubblico: true }).

Lookup utenti

La libreria non include un componente per cercare utenti. Il consumer deve fornire:

  • una sorgente di utenti (es. vista v_utenti PostgREST della shell)
  • un componente di autocomplete (es. <SelectRemote> di @pzeta/vue-form)

Esempio di integrazione:

<SelectRemote
  v-model="utenteSelezionato"
  endpoint="/v_utenti"
  search-field="nome,email"
  option-label="nome"
  option-value="idutente"
/>

Stato di salvataggio

StatoUI
isLoading.value === trueSkeleton sulla lista ACL
isSaving.value === trueLoader sul pulsante azione
error.value !== nullBanner errore inline

Permessi

Il dialog dovrebbe essere aperto solo dal proprietario. La toolbar nasconde il pulsante ACL agli altri permessi, ma il componente non rifiuta input a livello di UI: il server-side rifiuta comunque insert/update/delete su foglidicalcoloacl se l'utente non è proprietario.

Tipi correlati