Excluir permanentemente sem todos os obstáculos

Adoraria ter uma opção para realmente excluir um post/tópico, sem ser obrigado a fazer isso a cada passo, o que está tornando tudo mais difícil.

Deveria ter apenas uma caixa de seleção para dizer que estou ciente do que vai acontecer e que ainda assim quero fazer. Não me obriguem a ter que excluir manualmente cada post em tópicos muito longos.

Ou, como no Reddit, eu deveria poder realmente excluir apenas o primeiro post e deixá-lo vazio.

Entendo que muitos dirão algo como “mas as respostas podem ser importantes para outros/posteridade”. Não posso enfatizar o suficiente o pouco que isso importa e que simplesmente não nos importamos se todas as respostas forem excluídas.

e não deveria ter que fazer isso para cada post individualmente.

3 curtidas

Acho que isso poderia funcionar bem como uma configuração de site do tipo enum, mantendo o comportamento atual como padrão. Por exemplo, permanent_topic_deletion_mode poderia oferecer o comportamento atual de “exigir que cada tópico seja permanentemente excluído primeiro” e um comportamento opcional de “excluir permanentemente o tópico e todos os tópicos”, ainda protegido pela confirmação digitada existente. Isso preservaria a política de segurança atual para os sites existentes, ao mesmo tempo em que permitiria que administradores que desejam explicitamente a exclusão em massa optassem por ela.

Uma breve atualização de progresso após analisar o código existente de exclusão permanente:

Descobri que o Discourse já possui o comportamento de exclusão em lote necessário aqui. Quando a primeira publicação é destruída permanentemente, o PostDestroyer já pode destruir recursivamente as demais publicações do tópico. A restrição está principalmente nas verificações de permissão/política, que atualmente exigem que as outras publicações sejam excluídas permanentemente primeiro.

Portanto, abandonei o enum de escopo global que sugeri acima e tenho uma implementação funcional usando um modelo de opt-in mais conservador:

  • a configuração existente can_permanently_delete permanece como o interruptor principal
  • há uma porta adicional oculta no nível do operador, desativada por padrão
  • quando ambas estiverem habilitadas, cada administrador pode optar individualmente em Preferências → Interface
  • um administrador que opta por isso não altera o comportamento para nenhum outro administrador
  • desativar a porta oculta restaura imediatamente o comportamento existente globalmente
  • a confirmação de exclusão permanente existente e outras salvaguardas permanecem em vigor

A preferência está atualmente rotulada como:

Permitir que a exclusão permanente de um tópico exclua todas as publicações

com a explicação:

Ao excluir permanentemente um tópico, também exclua permanentemente todas as publicações restantes, em vez de exigir que sejam excluídas individualmente.

Adicionei testes de política/segurança no backend, cobertura do controlador confirmando que o tópico e todas as publicações restantes são realmente removidos permanentemente, cobertura do serializador/API e testes de aceitação no frontend para a visibilidade e salvamento da preferência. Esses testes estão passando.

Também estou analisando o registro de alterações neste opt-in por administrador nos Logs de Ações da Equipe, pois habilitar um modo de exclusão mais destrutivo parece valer a pena como um evento de auditoria com carimbo de data e hora.

Publicarei o PR no GitHub assim que terminar isso e a revisão final.

Uma atualização final: a implementação está agora disponível como um PR pronto para revisão:

O design final é a abordagem de opt-in por administrador descrita acima, em vez da enumeração em nível de site que eu sugeri inicialmente.

Alguns detalhes de UX foram adicionados durante a revisão final:

  • a preferência por administrador é exibida em Preferências → Interface quando as configurações de nível de site permitem
  • quando um administrador que optou por participar exclui permanentemente a primeira mensagem/tópico, a confirmação irreversível agora afirma explicitamente que isso excluirá permanentemente o tópico e todas as respostas
  • quando o administrador não optou por participar, o comportamento e a redação existentes permanecem inalterados
  • o período de espera para exclusão permanente pelo mesmo administrador ainda é aplicado
  • as alterações de preferência são registradas nos Registros de Ações da Equipe

Também testei manualmente o caminho completo de opt-in em um tópico descartável com duas respostas e verifiquei posteriormente que o tópico e todas as suas mensagens haviam sido removidos do banco de dados.

As principais verificações de teste/lint do GitHub foram aprovadas; o PR está agora aguardando revisão, com a varredura de segurança ainda na fila no momento da escrita.

1 curtida