Excluir permanentemente sem todos os obstáculos

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.