Una actualización rápida del progreso tras analizar el código existente de eliminación permanente:
Descubrí que Discourse ya cuenta con el comportamiento de eliminación en lote necesario para esto. Cuando la primera publicación se elimina de forma permanente, PostDestroyer ya puede eliminar recursivamente de forma permanente las publicaciones restantes del tema. La restricción principal radica en las comprobaciones de permisos/políticas, que actualmente requieren que las otras publicaciones se eliminen de forma permanente primero.
Por lo tanto, me he alejado del enum a nivel de sitio que sugerí anteriormente y ahora tengo una implementación funcional que utiliza un modelo de opt-in más conservador:
- la configuración existente
can_permanently_deletesigue siendo el interruptor principal - hay una puerta de acceso adicional a nivel de operador, oculta y desactivada por defecto
- cuando ambas están habilitadas, cada administrador puede optar individualmente por ella en Preferencias → Interfaz
- que un administrador opte por ello no cambia el comportamiento para ningún otro administrador
- deshabilitar la puerta de acceso oculta restaura inmediatamente el comportamiento existente a nivel global
- la confirmación de eliminación permanente existente y otras salvaguardas permanecen en su lugar
La preferencia está etiquetada actualmente como:
Permitir que la eliminación permanente del tema elimine todas las publicaciones
con la explicación:
Al eliminar un tema de forma permanente, también elimina de forma permanente todas las publicaciones restantes en lugar de requerir que se eliminen de forma permanente individualmente.
He añadido pruebas de política/seguridad del backend, cobertura del controlador que confirma que el tema y todas las publicaciones restantes se eliminan realmente de forma permanente, cobertura del serializador/API, y pruebas de aceptación del frontend para la visibilidad y el guardado de la preferencia. Estas están pasando.
También estoy revisando cómo registrar los cambios en esta opción de opt-in por administrador en los Registros de Acciones del Personal, ya que habilitar un modo de eliminación más destructivo parece merecer ser un evento de auditoría con marca de tiempo.
Publicaré la PR de GitHub una vez que haya terminado con eso y la revisión final.