真正地永久删除,别再设置那么多障碍了

希望能有一个选项,让我真正删除帖子/主题,而不是在每一步都被卡住,这样只会让事情变得更麻烦。

这里应该只需要一个复选框,表示我意识到会发生什么并且仍然想要这样做。不要强迫我可能不得不手动删除超长主题中的每一个帖子。

或者像 Reddit 那样,我应该能够真正只删除第一个帖子,使其变空。

我理解很多人会说诸如“但回复对其他人/后世可能很重要”之类的话。我无法强调这有多不重要,我们根本不在乎所有回复都被删除。

而且不应该对每一个单独的帖子都要做这件事

3 个赞

我认为将其实现为枚举类型的站点设置会非常合适,同时保留现有行为作为默认选项。例如,permanent_topic_deletion_mode 可以提供当前的“要求先永久删除每个帖子”行为,以及一个可选的“永久删除主题及所有帖子”行为,两者仍保留在现有的类型化确认机制之后。这样既能保留现有站点当前的安全策略,又能让明确希望批量删除的管理员选择启用该功能。

在深入研究现有的永久删除代码后,这里有一个快速的进度更新:

我发现 Discourse 已经具备了此处所需的实际批量删除行为。当第一个帖子被永久销毁时,PostDestroyer 已经可以递归地永久销毁该主题中剩余的帖子。主要的限制在于权限/策略检查,目前这些检查要求其他帖子必须先被永久删除。

因此,我放弃了上面建议的站点范围枚举,并采用了一种更保守的“选择加入”(opt-in)模型,目前已有可用的实现:

  • 现有的 can_permanently_delete 设置仍然是主开关
  • 增加了一个额外的隐藏操作员级别门控,默认处于禁用状态
  • 当两者都启用时,每位管理员都可以在“偏好设置 → 界面”下单独选择加入
  • 一位管理员选择加入不会改变其他任何管理员的行为
  • 禁用该隐藏门控会立即全局恢复现有行为
  • 现有的永久删除确认和其他安全措施保持不变

该偏好设置当前的标签为:

允许永久删除主题时删除所有帖子

说明如下:

在永久删除主题时,也永久删除所有剩余帖子,而不是要求逐一永久删除它们。

我添加了后端策略/安全测试、控制器覆盖(确认主题和所有剩余帖子确实被永久移除)、序列化器/API 覆盖,以及用于偏好设置可见性和保存的前端验收测试。这些测试均已通过。

我还在考虑将此按管理员选择加入的更改记录到“员工操作日志”中,因为启用更具破坏性的删除模式似乎值得作为一个带时间戳的审计事件。

等我完成此项工作以及最终审查后,我会发布 GitHub PR。

最终更新:该实现现已作为一个待审查的 PR 上线:

最终设计采用了上述描述的按管理员单独选择加入(opt-in)的方式,而不是我最初建议的全站范围的枚举。

在最终审查过程中,还增加了一些用户体验细节:

  • 当站点级别的限制允许时,按管理员的偏好设置将显示在“偏好设置 → 界面”下
  • 当已选择加入的管理员永久删除第一个帖子/主题时,不可逆的确认提示现在会明确说明这将永久删除该主题及所有回复
  • 当管理员未选择加入时,现有的行为和措辞保持不变
  • 现有的同一管理员永久删除冷却时间仍然有效
  • 偏好设置的更改会记录在“员工操作日志”(Staff Action Logs)中

我还在一个包含两个回复的临时主题上手动测试了完整的已选择加入路径,并随后验证该主题及其所有帖子均已从数据库中删除。

主要的 GitHub 测试/代码风格检查已通过;该 PR 目前正在等待审查,撰写本文时安全扫描仍在排队中。

1 个赞