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

Было бы здорово иметь возможность действительно удалить пост/тему, а не постоянно сталкиваться с препятствиями на каждом шагу — это только усложняет задачу.

Здесь должен быть просто флажок, где можно подтвердить, что я осознаю последствия и хочу это сделать. Не заставляйте меня, возможно, вручную удалять каждый пост в очень длинных темах.

Или, как в Reddit, я должен иметь возможность реально удалить только первый пост, сделав его пустым.

Я понимаю, что многие будут говорить что-то вроде «но ответы могут быть важны для других/для истории». Я не могу подчеркнуть, насколько мало это имеет значения, и нам просто всё равно, если все ответы будут удалены.

И не должно быть необходимости делать это для каждого отдельного поста.

3 лайка

Я думаю, что это может хорошо сработать в виде параметра конфигурации сайта с перечислением значений (enum), при этом текущее поведение останется по умолчанию. Например, permanent_topic_deletion_mode мог бы предлагать текущее поведение «требуется сначала безвозвратно удалить каждый пост» и опциональное поведение «безвозвратно удалить тему и все посты», всё ещё защищённое существующим подтверждением с вводом текста. Это позволило бы сохранить текущую политику безопасности для существующих сайтов, одновременно давая администраторам, которые явно хотят массовое удаление, возможность включить его.

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

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

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

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

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

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

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

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

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

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

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

Финальное обновление: реализация теперь доступна в виде готового к рецензии PR:

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

В ходе финальной проверки были добавлены несколько деталей пользовательского интерфейса:

  • настройка для каждого администратора отображается в разделе «Настройки → Интерфейс», если это разрешено на уровне сайта
  • когда подключившийся администратор безвозвратно удаляет первый пост/тему, необратимое подтверждение теперь явно указывает, что это приведет к безвозвратному удалению темы и всех ответов
  • если администратор не подключился к этой функции, существующее поведение и формулировки остаются без изменений
  • существующий кулдаун для безвозвратного удаления одним и тем же администратором по-прежнему действует
  • изменения настроек записываются в журнал действий персонала (Staff Action Logs)

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

Основные проверки GitHub (тесты/линтер) пройдены; PR ожидает рецензии, при этом на момент написания текста сканирование безопасности всё ещё находится в очереди.

1 лайк