在深入研究现有的永久删除代码后,这里有一个快速的进度更新:
我发现 Discourse 已经具备了此处所需的实际批量删除行为。当第一个帖子被永久销毁时,PostDestroyer 已经可以递归地永久销毁该主题中剩余的帖子。主要的限制在于权限/策略检查,目前这些检查要求其他帖子必须先被永久删除。
因此,我放弃了上面建议的站点范围枚举,并采用了一种更保守的“选择加入”(opt-in)模型,目前已有可用的实现:
- 现有的
can_permanently_delete设置仍然是主开关 - 增加了一个额外的隐藏操作员级别门控,默认处于禁用状态
- 当两者都启用时,每位管理员都可以在“偏好设置 → 界面”下单独选择加入
- 一位管理员选择加入不会改变其他任何管理员的行为
- 禁用该隐藏门控会立即全局恢复现有行为
- 现有的永久删除确认和其他安全措施保持不变
该偏好设置当前的标签为:
允许永久删除主题时删除所有帖子
说明如下:
在永久删除主题时,也永久删除所有剩余帖子,而不是要求逐一永久删除它们。
我添加了后端策略/安全测试、控制器覆盖(确认主题和所有剩余帖子确实被永久移除)、序列化器/API 覆盖,以及用于偏好设置可见性和保存的前端验收测试。这些测试均已通过。
我还在考虑将此按管理员选择加入的更改记录到“员工操作日志”中,因为启用更具破坏性的删除模式似乎值得作为一个带时间戳的审计事件。
等我完成此项工作以及最终审查后,我会发布 GitHub PR。