面倒な手続きなしで完全に削除したい

既存の恒久削除コードを調査した後の簡単な進捗報告です。

Discourseには、ここでは必要な実際の一括削除の動作がすでに実装されていることがわかりました。最初の投稿が恒久的に破棄されると、PostDestroyer はトピック内の残りの投稿を再帰的に恒久的に破棄することができます。制限は主に権限/ポリシーのチェックにあり、現在では他の投稿を先に恒久的に削除する必要があります。

そのため、上記で提案したサイト全体の列挙型(enum)から離れ、より保守的なオプトインモデルを使用した動作する実装を作成しました。

  • 既存の can_permanently_delete 設定がマスタースイッチとして機能し続けます
  • デフォルトで無効になっている、追加の非公開のオペレーターレベルのゲートがあります
  • 両方が有効な場合、各管理者は「設定 → インターフェース」で個別にオプトインできます
  • 1人の管理者がオプトインしても、他の管理者の動作は変わりません
  • 非公開のゲートを無効にすると、既存の動作が即座にグローバルに復元されます
  • 既存の恒久削除の確認とその他の安全策は維持されます

現在の設定項目のラベルは以下の通りです:

トピックの恒久削除時にすべての投稿を削除することを許可する

説明は以下の通りです:

トピックを恒久的に削除する際、個別に恒久的に削除する代わりに、残りのすべての投稿も恒久的に削除します。

バックエンドのポリシー/セキュリティテスト、トピックと残りのすべての投稿が実際に恒久的に削除されることを確認するコントローラーのカバレッジ、シリアライザー/APIのカバレッジ、および設定の表示と保存に関するフロントエンドの受け入れテストを追加しました。これらはすべてパスしています。

より破壊的な削除モードを有効にすることは、タイムスタンプ付きの監査イベントとして記録する価値があると思われるため、この管理者ごとのオプトインの変更をスタッフアクションログに記録することについても検討しています。

これと最終レビューが完了したら、GitHub PRを投稿します。