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

投稿やトピックを本当に削除できるオプションが欲しいです。毎回そのように促されるのは煩わしく、かえって手間が増えています。

本来、そうなることを理解しているが、それでも削除したい旨を確認するチェックボックスがあれば十分です。超長尺のトピックで、すべての投稿を手動で削除しなければならないような強制はすべきではありません。

あるいは、Redditのように、最初の投稿だけを本当に削除して空にする機能があっても良いと思います。

「返信は他のユーザーや後世にとって重要かもしれない」という意見は多いと分かっていますが、それがどれほど重要でないか、また、すべての返信が削除されても構わないという点について、強調して伝えたいと思います。

そして、すべての投稿に対してこれをやらされるべきではありません。

「いいね!」 3

これは既存の動作をデフォルトとして維持しつつ、enum型のサイト設定としてうまく機能する可能性があると思います。例えば、permanent_topic_deletion_mode で、現在の「各投稿をまず恒久的に削除する必要がある」動作と、オプトイン型の「トピックとそのすべての投稿を恒久的に削除する」動作を提供できます。後者も、既存の型付き確認の背後に置かれます。これにより、既存のサイトでは現在の安全ポリシーを維持しつつ、一括削除を明示的に希望する管理者がオプトインできるようになります。

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

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

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

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

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

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

説明は以下の通りです:

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

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

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

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

最終アップデート:実装は、レビュー可能なPRとして公開されました。

最終的な設計は、以前提案したサイト全体のenumではなく、上記で説明した管理者ごとのオプトイン方式です。

最終確認の段階で、いくつかのUXの詳細が追加されました。

  • サイトレベルのゲートが許可している場合、管理者ごとの設定は「設定 → インターフェース」の下に表示されます。
  • オプトインした管理者が最初の投稿/トピックを完全に削除した場合、取り消し不能の確認ダイアログに「トピックとすべての返信を完全に削除します」と明示的に記載されるようになります。
  • 管理者がオプトインしていない場合、既存の動作と文言は変更されません。
  • 同一管理者による完全削除のクールダウンは引き続き適用されます。
  • 設定の変更はスタッフアクションログに記録されます。

また、2つの返信がある使い捨てのトピックで、オプトイン後の完全な処理フローを手動でテストし、その後、データベースからトピックとそのすべての投稿が削除されたことを確認しました。

GitHubの主なテスト/リンタチェックは合格しています。PRは現在レビュー待ちであり、執筆時点ではセキュリティスキャンがまだキューに入っている状態です。

「いいね!」 1