granular_anonymous_and_logged_in_groups_permissions の安定化から恒久化への道

これは Granular group-based permissions for anonymous and logged in users の補足トピックであり、現在は作業中(WIP)です。


コア、プラグイン、テーマの各コードベースには、この impending な変更を考慮せず、user.in_any_groups? やこれに対応するために使用される各種ガードリアンメソッドを使わずに、直接 everyone またはグループ ID (0) を参照している箇所がまだいくつか残っています。

参考までに、一部の自動グループ ID は以下の通りです:

  • 0 - everyone
  • 1 - admins
  • 2 - moderators
  • 3 - staff
  • 4 - anonymous_users
  • 5 - logged_in_users

このトピックは、安定版への移行に向けて、このシステムに関する修正を追跡するための中心的な場所として機能します。Discourse 顧客用のカスタムプラグインやテーマはここでは追跡されません。これについては別途内部でリストを管理しています。

高優先度の問題

Moin が提起した問題:

  • コア
    • About - apply_excluded_groups は、about_page_hidden_groups 内のグループから選択されたモデレーターと管理者を非表示にするためにのみ使用されます。0|4|5 のような擬似グループをここで使用する意味はなく、それらは disallowed_groups に追加されるべきです。設定の説明も誤解を招くため、更新が必要です。
    • EditCategoryTabsController - _wouldLoseAccess (discourse/frontend/discourse/admin/controllers/edit-category/tabs.js at 86552acfbaf816db3b9db5f761f5e9f2bd221c21 · discourse/discourse · GitHub) では現在、可視的なグループのみを確認していますが、ACL の evaluate のようにサーバーサイドでのチェックであるべきです。

コアプラグイン

  • Discourse Templates
      • can_use_private_templates? はまだ直接 everyone を参照しており、サイト設定の _map ショートハンドを使用していません。
  • Discourse AI
      • ガーディアン拡張子の can_see_summary? は user.in_any_groups? を使用していません。
      • AiBot::Playground の can_attach? は user.in_any_groups? を使用していません。
      • ai-translation-topic-admin の addTopicAdminMenuButton はクライアント上で currentUser.groups を確認していますが、信頼性が低いです。代わりにサーバーサイドで content_localization_allowed_groups をチェックしてください。
  • Discourse Assign. ここには多くの問題があります。
    • AssignmentPermissions の user_ids_in_groups ではなく、user_ids_in_groups を使用すべきです。(注: 原文のまま記載)
    • assign_allowed_on_groups には disallowed_groups として 0|4|5 を追加する必要があります。これらはここでは意味がなく、具体的なグループのみが重要です。

その他のプラグイン

  • Activity Pub
    • showStatusToUser のクライアントサイドでの user.groups および everyone チェックを削除してください。activity_pub_post_status_visibility_groups のデフォルトを 4|5 に変更してください。
  • Suggested Edits
    • GuardianExtensions の user_in_suggested_edits_group? は user.in_any_groups? を使用する必要があります。suggested_edits_review_groups の mandatory_groups に 1 を追加し、can_review_suggested_edits_in_topic_list 内の管理者の特別ケースを削除してください。
    • suggested_edits_review_groups と suggested_edits_suggest_groups の disallowed_groups に 0|4|5 を追加してください。この設定は本来、これらの擬似グループで使用されることを意図していません。
  • Live

テーマ

コンポーネント

低優先度の問題

  • コア
    • TopicGuardian の is_in_edit_topic_groups は、サイト設定に対して _map 拡張子を使用すべきです。
    • Roleable#whisperer? は user.in_any_groups? を使用し、管理者チェックを廃止するべきです。また、whispers_allowed_groups 設定の mandatory_values に 1 を追加してください。
    • allow_solved_in_groups サイト設定の disallowed_groups に 0|4 を追加してください。これは PM のみを対象としています。
    • about_page_extra_groups の disallowed_groups に 0|4|5 を追加してください。これは About ページにおいて具体的なグループのみを対象とするものです。
    • PresenceChannel の can_view? について、この impending な変更が Permanent に移行する際に Group::AUTO_GROUPS[:everyone] チェックを削除する必要があるというメモを残してください。

コアプラグイン

  • Chat
    • チャットの自動参加/自動離脱ロジックおよび users_with_unreads における everyone_allowed の様々な場所で、この impending な変更が Permanent に移行する際に :everyone チェックを削除するというメモを残してください。
    • FIX: Handle new pseudogroups in message bus group IDs - Pull Request #42610 - discourse/discourse - GitHub で MessageBus が擬似グループを正しく処理できるようになったため、Chat::Publisher の chat_allowed_group_ids を更新して特別な擬似グループを削除してください。
  • Assign
    • plugin.rb 内の add_model_callback(Group) を削除してください。ID ではなくグループ名を見ており、無関係/不要なコードです。

その他のプラグイン

  • Code Review
    • code_review_allowed_groups に対する can_review_code? チェックは _map 拡張子を使用しておらず、user.in_any_groups? も使用していません。設定の mandatory_groups に 1 を追加し、ガーディアン内の管理者の特別チェックを廃止してください。disallowed_groups に 0|4|5 を追加してください。
  • Needs Love
    • needs_love_allowed_groups に対する can_needs_love? チェックは _map 拡張子を使用しておらず、user.in_any_groups? も使用していません。設定の mandatory_groups に 1 を追加し、ガーディアン内の管理者の特別チェックを廃止してください。disallowed_groups に 0|4|5 を追加してください。
  • Staff Alias
    • staff_alias_allowed_groups に対する can_post_as_staff_alias チェックは _map 拡張子を使用しておらず、user.in_any_groups? も使用していません。disallowed_groups に 0|4|5 を追加してください。

テーマ

コンポーネント

マイグレーションのための次のステップ

  • AiAgent モデルの allowed_group_ids をマイグレート

こちらで対応しました FIX: everyone pseudogroup roadmap part 1 - Pull Request #43798 - discourse/discourse - GitHub