Mi piacerebbe avere un’opzione per eliminare effettivamente un post o un argomento, senza dover affrontare ogni volta ostacoli che rendono tutto più difficile.
Basterebbe una casella di spunta per confermare di essere consapevoli delle conseguenze e di voler procedere comunque. Non dovrei essere costretto a eliminare manualmente ogni singolo post in argomenti molto lunghi.
Oppure, come su Reddit, dovrei poter eliminare davvero solo il primo post, lasciandolo vuoto.
Capisco che in molti diranno qualcosa come “ma le risposte potrebbero essere importanti per gli altri o per la posterità”. Non posso sottolineare abbastanza poco quanto questo conti: semplicemente non ci importa se tutte le risposte vengono eliminate.
e non dovrei dover fare questo per ogni singolo post.
Penso che questa soluzione potrebbe funzionare bene come impostazione a livello di sito basata su un enum, mantenendo il comportamento attuale come valore predefinito. Ad esempio, permanent_topic_deletion_mode potrebbe offrire il comportamento attuale, che richiede la cancellazione permanente di ogni singolo post prima di procedere, e un comportamento opzionale di “cancellazione permanente dell’argomento e di tutti i post”, sempre protetto dalla conferma di input già esistente. Questo permetterebbe di mantenere la politica di sicurezza attuale per i siti esistenti, consentendo al contempo agli amministratori che desiderano esplicitamente la cancellazione in blocco di attivarla.
Un rapido aggiornamento sullo stato di avanzamento dopo aver analizzato il codice esistente per l’eliminazione permanente:
Ho scoperto che Discourse dispone già del comportamento di eliminazione in blocco necessario in questo caso. Quando il primo post viene eliminato permanentemente, PostDestroyer può già eliminare in modo ricorsivo e permanente i post rimanenti nel topic. La restrizione risiede principalmente nei controlli di autorizzazione e policy, che attualmente richiedono che gli altri post vengano eliminati permanentemente in precedenza.
Di conseguenza, ho abbandonato l’enum a livello di sito che avevo suggerito in precedenza e ho realizzato un’implementazione funzionante che utilizza un modello di opt-in più conservativo:
l’impostazione esistente can_permanently_delete rimane l’interruttore principale
è presente un ulteriore controllo a livello di operatore, nascosto e disabilitato per impostazione predefinita
quando entrambi sono abilitati, ogni amministratore può optare individualmente per questa funzione nelle Preferenze → Interfaccia
l’opt-in di un amministratore non modifica il comportamento per gli altri amministratori
la disattivazione del controllo nascosto ripristina immediatamente il comportamento esistente a livello globale
la conferma dell’eliminazione permanente esistente e le altre misure di sicurezza restano invariate
L’impostazione è attualmente etichettata come:
Consenti all’eliminazione permanente del topic di eliminare tutti i post
con la seguente spiegazione:
Quando si elimina permanentemente un topic, elimina anche in modo permanente tutti i post rimanenti, anziché richiederne l’eliminazione permanente individuale.
Ho aggiunto test di policy/sicurezza sul backend, copertura dei controller che conferma che il topic e tutti i post rimanenti vengono effettivamente eliminati in modo permanente, copertura di serializer/API e test di accettazione frontend per la visibilità e il salvataggio dell’impostazione. Questi test sono superati.
Sto anche valutando la registrazione delle modifiche a questo opt-in per amministratore nei registri delle azioni dello staff (Staff Action Logs), poiché l’abilitazione di una modalità di eliminazione più distruttiva sembra meritevole di essere un evento di audit con timestamp.
Pubblicherò la PR su GitHub una volta completato questo aspetto e la revisione finale.
Un ultimo aggiornamento: l’implementazione è ora disponibile come PR pronta per la revisione:
Il design finale è l’approccio di opt-in per amministratore descritto sopra, anziché l’enum a livello di sito che avevo inizialmente suggerito.
Durata l’ultima passata sono stati aggiunti alcuni dettagli di UX:
la preferenza per amministratore viene visualizzata in Preferenze → Interfaccia quando i controlli a livello di sito lo consentono
quando un amministratore che ha effettuato l’opt-in elimina definitivamente il primo post/argomento, la conferma irreversibile ora specifica esplicitamente che verranno eliminati definitivamente l’argomento e tutte le risposte
quando l’amministratore non ha effettuato l’opt-in, il comportamento e la formulazione esistenti rimangono invariati
il cooldown esistente per l’eliminazione definitiva da parte dello stesso amministratore viene ancora applicato
le modifiche alle preferenze vengono registrate nei Registri delle Azioni dello Staff
Ho anche testato manualmente l’intero percorso di opt-in su un argomento usa e getta con due risposte e ho successivamente verificato che l’argomento e tutti i suoi post fossero stati rimossi dal database.
I principali controlli di test/lint di GitHub sono stati superati; la PR è ora in attesa di revisione, con la scansione di sicurezza ancora in coda al momento della stesura.