++ fix richiesta password prima di azzeramento applicazione
This commit is contained in:
26
HANDOFF.md
26
HANDOFF.md
@@ -291,7 +291,8 @@ Scelte non ovvie:
|
||||
pericolosa (`avviaAzzeramento`) crea *solo* il backup e si ferma in
|
||||
`attesa-download`; la cancellazione parte da un secondo clic esplicito
|
||||
(`confermaAzzeramento`), che rifiuta se lo stato non registra un
|
||||
`servito_at`. Il primo tentativo faceva partire il reset dalla coda dello
|
||||
`servito_at` e se non riceve la password dell'amministratore. Il primo
|
||||
tentativo faceva partire il reset dalla coda dello
|
||||
`streamDownload`, "dopo l'ultimo byte" — **non funziona**: con
|
||||
`fastcgi_buffering on` (il default, e `docker/nginx/default.conf` non lo
|
||||
disattiva) nginx accetta l'intera risposta dal processo PHP, che quindi
|
||||
@@ -300,6 +301,29 @@ Scelte non ovvie:
|
||||
*spedito* l'archivio, non che sia arrivato: quella verifica è dell'operatore,
|
||||
e per questo la conferma è umana.
|
||||
|
||||
- **La password si richiede al secondo clic, e non passa dallo snapshot.** La
|
||||
sessione è già autenticata, quindi la password non serve a stabilire *chi*
|
||||
sia: serve a stabilire che davanti allo schermo ci sia ancora quella persona
|
||||
— una scheda lasciata aperta su una postazione condivisa è lo scenario contro
|
||||
cui protegge. Viaggia come **parametro** di `confermaAzzeramento($password)`,
|
||||
non come proprietà `wire:model`: le proprietà pubbliche di Livewire vengono
|
||||
serializzate nello snapshot e rispedite al browser a ogni risposta, e una
|
||||
password non ha motivo di fare quel viaggio di ritorno.
|
||||
|
||||
Attenzione al dettaglio che costa un pomeriggio: la proprietà
|
||||
`$passwordConferma` **esiste comunque, e resta sempre vuota**. Livewire
|
||||
scarta dalla risposta ogni errore la cui chiave non corrisponda a una
|
||||
proprietà del componente (`SupportValidation::dehydrate()` filtra su
|
||||
`Utils::hasProperty`), quindi senza quella riga `addError('passwordConferma',
|
||||
…)` sparisce in silenzio: il pulsante sembra non fare nulla, mentre il
|
||||
controllo sta funzionando. Non collegarla al campo con `wire:model`, o la
|
||||
password torna nello snapshot.
|
||||
|
||||
Cinque tentativi sbagliati in 5 minuti bloccano l'azione (`RateLimiter`,
|
||||
chiave per utente). Senza, la richiesta di password su una sessione dirottata
|
||||
sarebbe solo un rallentamento. Il blocco è sull'operazione, non sull'account:
|
||||
nessuno resta chiuso fuori dall'applicazione.
|
||||
|
||||
- **Nell'azzeramento i file si cancellano prima del database.** Svuotare il
|
||||
disco è l'unico passo che può fallire per cause esterne (permessi sul
|
||||
volume), e fallire lì non ha ancora toccato niente. Nell'ordine inverso un
|
||||
|
||||
Reference in New Issue
Block a user