「グループによる投稿とトピックの全削除」を「自分自身のコンテンツ」と「グローバルコンテンツ」の権限に分割

すべての投稿とトピックの削除を許可するグループ設定を、より細かな権限に分割することを提案します。

現状、この設定は広範です。選択されたグループは、他のユーザーが作成した投稿やトピックを削除でき、さらに削除された投稿やトピックを表示することもできます。これはモデレーターや信頼されたモデレーショングループにとっては理にかなっていますが、ユーザーが自身のコンテンツに対してより強い制御権を持ちたいという用途には、権限が強すぎます。

ここで言う「削除」とは、データベースからの永続的削除(ハード削除)を意味するわけではありません。

主に問いたいのは、通常のユーザー向け削除や編集履歴の挙動です。例えば、ユーザーが自身の投稿を削除した際、通常通り「削除済み」のプレースホルダーが残るのか、以前の編集内容が編集履歴 UI を通じてアクセス可能なのか、また「自身の投稿のみ」を管理するためのより狭い権限を設定できるのか、といった点です。

考えられる分割案は以下の通りです。

  1. 自身の投稿とトピックの削除を許可するグループ
  2. すべての投稿とトピックの削除を許可するグループ

最初の設定は、現在のユーザーが作成したコンテンツにのみ適用されます。2 番目の設定は、他のユーザーのコンテンツを削除し、削除済みコンテンツを表示できる権限を持つ信頼されたグループ向けに、現状の広範な挙動を維持します。

これにより、最小権限の原則に基づくロール設計が容易になります。例えば、サイト運営者が TL4/リーダーユーザー、あるいはカスタムの信頼グループに対し、他のユーザーのコンテンツに対するモデレーターのような権限を与えずに、自身の投稿やトピックの削除をより自由に制御できるようにしたい場合などが考えられます。

特に、最初の投稿を削除すると他のユーザーの返信を含むトピックに影響が出るケースでは、何らかの対策が必要になることは理解しています。そのような場合、Discourse は現状の制限を維持するか、モデレーターの介入を要求するか、あるいは「返信のないトピック」や「返信のみ」に「自身のコンテンツ」権限を限定するなどの対応が可能でしょう。

主な要望は、現在のグローバルな削除権限とは別に、「自身のコンテンツ」の削除および編集履歴に関する権限を設けることです。これにより、管理者は「通常のユーザーによるソフト削除」と「他のユーザーの投稿・トピックを削除できる広範な権限」の二者択一を迫られることなく、柔軟な設定が可能になります。

ここでの混乱の一部は、「削除されたコンテンツを表示する」チェックに異なる種類があるかもしれないという点にあると思います。

PostGuardian を見てみると、個別に削除された投稿は、単にユーザーが delete_all_posts_and_topics_allowed_groups に所属しているからといって、can_see_post? を通じて表示されるわけではありません。

例えば、個別の削除済み投稿の表示権限は、以下のような処理を経ているようです。

def can_see_deleted_post?(post)
  return false if !post.trashed?
  return false if @user.anonymous?
  return true if is_staff?
  post.deleted_by_id == @user.id && @user.has_trust_level?(TrustLevel[4])
end

したがって、delete_all_posts_and_topics_allowed_groups に所属する非スタッフの TL2 ユーザーは、can_see_post? を通じてすべての削除済み投稿本文を開いて読めるわけではありません。

しかし、同じ設定は以下でも使用されています。

def can_see_deleted_posts?(category = nil)
  is_category_group_moderator?(category) ||
    @user.in_any_groups?(SiteSetting.delete_all_posts_and_topics_allowed_groups_map)
end```
つまり、この設定は概念的には「投稿者が自身のコンテンツを撤回できる」という範囲よりも広いものです。これは、他のユーザーの表示済み投稿を削除するためにも、少なくとも一部の削除済み投稿の表示やリスト表示の機能のためにも使用されているようです。

そのため、私の懸念は「この設定が確実にすべてのエンドポイントですべての削除済み投稿本文を露出させる」ということよりも、現在の権限がいくつかの概念を混合している点にあります。

1. 他のユーザーの投稿やトピックを削除する権限;
2. 一部の文脈で削除された投稿やトピックを表示またはリスト表示する権限;
3. 投稿者が自身の足跡をより制御できるようにする権限。

私のユースケースでは、3 番目のみが必要です。

そのため、独自のコンテンツに関する設定の方が明確だと考えています。これにより、既存のセーフガードに従って、ユーザーが自身の投稿やトピックを削除または撤回できるようにしつつ、他のユーザーのコンテンツに対するより広範なモデレーション的な権限や、削除済みコンテンツの表示権限を与えずに済みます。

UI の動作を明確にするために、以下を希望します:削除されたコンテンツが一般ユーザーに見えるようになることを求めているのではありません。

自分のコンテンツを削除する権限については、理想的な動作は閲覧者によって異なるべきです:

  • 投稿者は、自分の投稿が取り消しまたは削除されたことを確認できるようにする必要があります。通常の削除済み投稿の赤いスタイルや折りたたみ状態で表示し、何が起こったかを理解し、回復が許可されている場合は回復できるようにします。
  • スタッフやモデレーターは、監査やモデレーションに必要な可視性を維持します。
  • 一般ユーザーは、削除されたコンテンツの痕跡を一切見られないようにすべきです。投稿本文も、編集履歴も、理想的には削除済み投稿のプレースホルダーさえ表示されません。

つまり、私が求めているのは、非スタッフユーザーに削除済みコンテンツの可視性や他のユーザーの投稿・トピックに対するグローバルな権限を与えることなく、投稿者が自分の可視範囲を制御できるようにすることです。

もう1つの微妙な点は、改訂履歴です。

PostRevisor を見ると、編集履歴は PostRevision を通じて別々に保存されているため、独自コンテンツの削除権限が必ずしも改訂レコードの物理的削除や監査可能性の喪失を意味するとは考えていません。

私が想定している権限は、より一般的なユーザー向け表示に関するものです。つまり、著者が自分の投稿やトピックを取り下げるかどうか、削除された投稿のプレースホルダーが残るかどうか、一般ユーザーが過去の編集内容を閲覧できるかどうか、そしてスタッフやモデレーターが適切な監査・モデレーションアクセス(例:「隠された返信 N 件を表示」を介して)を維持できるかどうか、といった点です。

したがって、私が求めている区別は以下の通りではありません。

  • 「データベースからすべての痕跡を消去する」

むしろ、以下のものです。

  • 「ユーザーに自分の表示されるコンテンツや足跡をより制御させる」
  • その一方で、他のユーザーのコンテンツを削除したり、一般的に削除されたコンテンツを閲覧したりするグローバル権限を付与しないこと。