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

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


コア、プラグイン、テーマの各コードベースには、この即将到来的変更を考慮せずに、または 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-adminaddTopicAdminMenuButton はクライアントで currentUser.groups を確認していますが、これは信頼できません。代わりに content_localization_allowed_groups に対してサーバーサイドのチェックを行う必要があります。
  • Discourse Assign. ここには多くの問題があります。
    • AssignmentPermissionsuser_ids_in_groups の代わりに、user_ids_in_groups を使用すべきです(注:原文のままですが、おそらく別のメソッドを指している可能性があります)。
    • assign_allowed_on_groups には disallowed_groups として 0|4|5 を追加すべきです。これらはここでは意味がなく、具体的なグループのみが重要です。

その他のプラグイン

  • Activity Pub
    • user.groupseveryone のチェックを行うクライアントサイドの showStatusToUser を削除します。activity_pub_post_status_visibility_groups のデフォルトを 4|5 に変更します。
  • Suggested Edits
    • GuardianExtensionsuser_in_suggested_edits_group?user.in_any_groups? を使用する必要があります。suggested_edits_review_groupsmandatory_groups1 を追加し、can_review_suggested_edits_in_topic_list 内の管理者の特別ケースを削除します。
    • suggested_edits_review_groupssuggested_edits_suggest_groupsdisallowed_groups0|4|5 を追加します。この設定はこれらの疑似グループで使用されることを意図していません。
  • Resenha

テーマ

コンポーネント

優先度が低い問題

  • コア
    • TopicGuardianis_in_edit_topic_groups は、サイト設定の _map 拡張機能を使用すべきです。
    • Roleable#whisperer?user.in_any_groups? を使用し、管理者チェックを廃止すべきです。whispers_allowed_groups 設定に 1mandatory_values として追加します。
    • allow_solved_in_groups サイト設定の disallowed_groups0|4 を追加します。これは PM のみを対象としています。
    • about_page_extra_groupsdisallowed_groups0|4|5 を追加します。これは、About ページ上で具体的なグループのみを対象とするべきです。
    • PresenceChannelcan_view? に、この即将到来的変更が Permanent に移行する際に Group::AUTO_GROUPS[:everyone] チェックを削除する必要があるという注記を追加します。

コアプラグイン

  • Chat
    • チャットの自動参加/自動退出ロジックや users_with_unreads のさまざまな箇所の everyone_allowed に、この即将到来的変更が Permanent に移行する際に :everyone チェックを削除する必要があるという注記を残します。
    • Chat::Publisherchat_allowed_group_ids を更新し、特別な疑似グループを削除します。FIX: Handle new pseudogroups in message bus group IDs - Pull Request #42610 - discourse/discourse - GitHub にあるように、MessageBus は現在疑似グループを正しく処理できるようになりました。
  • Assign
    • plugin.rb の add_model_callback(Group) を廃止します。これはグループ名ではなく ID を参照している無関係な/デッドコードです。

その他のプラグイン

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

テーマ

コンポーネント

移行のための次のステップ

  • AiAgent モデルの allowed_group_ids を移行します。
「いいね!」 3