На самом деле удалить навсегда без всяких препятствий

Краткое обновление о прогрессе после изучения существующего кода для постоянного удаления:

Я обнаружил, что в Discourse уже есть фактическое поведение массового удаления, необходимое здесь. Когда первый пост удаляется без возможности восстановления, PostDestroyer уже способен рекурсивно и безвозвратно удалить оставшиеся посты в теме. Ограничение заключается в основном в проверках разрешений и политик, которые в настоящее время требуют, чтобы другие посты были сначала удалены безвозвратно.

В связи с этим я отказался от общесайтового перечисления (enum), которое я предложил выше, и теперь использую рабочую реализацию с более консервативной моделью опционального включения:

  • существующая настройка can_permanently_delete остаётся главным переключателем;
  • добавлен дополнительный скрытый механизм управления на уровне операторов, отключённый по умолчанию;
  • когда оба условия активны, каждый администратор может индивидуально включить эту функцию в разделе «Настройки» → «Интерфейс»;
  • включение функции одним администратором не изменяет поведение для других администраторов;
  • отключение скрытого механизма немедленно восстанавливает существующее поведение для всего сайта;
  • существующее подтверждение постоянного удаления и другие защитные механизмы остаются в силе.

Название предпочтения на данный момент следующее:

Разрешить постоянное удаление темы для удаления всех постов

с пояснением:

При постоянном удалении темы также безвозвратно удалять все оставшиеся посты, а не требовать их индивидуального постоянного удаления.

Я добавил тесты политики безопасности на стороне сервера, покрытие контроллера, подтверждающее, что тема и все оставшиеся посты действительно удаляются безвозвратно, покрытие сериализатора/API, а также тесты приёмки на стороне клиента для видимости и сохранения этого предпочтения. Все тесты проходят успешно.

Я также рассматриваю возможность записи изменений этого индивидуального включения для каждого администратора в журналах действий персонала (Staff Action Logs), поскольку активация более разрушительного режима удаления кажется достойным событием аудита с временной меткой.

Я опубликую PR на GitHub, когда закончу с этим и финальным обзором.