通往 granular_anonymous_and_logged_in_groups_permissions 稳定,进而永久化的道路

这是 Granular group-based permissions for anonymous and logged in users 的配套主题,目前仍在完善中(WIP)。


在核心、插件和主题的各个代码库中,仍有一些地方直接引用了 everyone 或组 ID 0,而没有考虑即将进行的这项更改,或者没有使用 user.in_any_groups? 或用于处理此问题的各种 guardian 方法。

作为快速参考,以下是一些自动组 ID:

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

随着我们接近稳定版本,此主题将作为跟踪该系统修复工作的中心位置。Discourse 客户的自定义插件和主题不在此处跟踪,我将为此维护一个内部列表。

高优先级问题

Moin 提出的问题:

核心插件

  • Discourse Templates
      • can_use_private_templates? 仍然直接引用 everyone,并且没有使用站点设置的 _map 简写。
  • Discourse AI
      • guardian 扩展中的 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 应该将 0|4|5 添加到 disallowed_groups,这些在这里都没有意义,只有具体组才重要。

其他插件

  • Activity Pub
    • 移除 showStatusToUser 中对 user.groupseveryone 的客户端检查。将 activity_pub_post_status_visibility_groups 的默认值更改为 4|5
  • Suggested Edits
    • user_in_suggested_edits_group? 需要在 GuardianExtensions 中使用 user.in_any_groups?。将 1 添加到 suggested_edits_review_groupsmandatory_groups 中,并移除 can_review_suggested_edits_in_topic_list 中的管理员特殊情况。
    • 0|4|5 添加到 suggested_edits_review_groupssuggested_edits_suggest_groupsdisallowed_groups 中,此设置并不打算与这些伪组一起使用。
  • Resenha

主题

组件

低优先级问题

  • 核心
    • TopicGuardian 中的 is_in_edit_topic_groups 应该使用站点设置的 _map 扩展。
    • Roleable#whisperer? 应该使用 user.in_any_groups? 并移除管理员检查,将 1 添加到 whispers_allowed_groups 设置的 mandatory_values 中。
    • 0|4 添加到 allow_solved_in_groups 站点设置的 disallowed_groups 中,这只涉及私信(PMs)。
    • 0|4|5 添加到 about_page_extra_groupsdisallowed_groups 中,这应该只处理关于页面上的具体组。
    • PresenceChannelcan_view? 中注明,当即将进行的更改移至 Permanent 时,我们需要移除 Group::AUTO_GROUPS[:everyone] 检查。

核心插件

  • Chat
  • Assign
    • 移除 plugin.rb 中的 add_model_callback(Group),它是无关/死代码,查看的是组名称而不是 ID。

其他插件

  • Code Review
    • code_review_allowed_groups 上的 can_review_code? 检查没有使用 _map 扩展,也没有使用 user.in_any_groups?。将 1 添加到该设置的 mandatory_groups 中,并移除 guardian 中的特殊管理员检查。将 0|4|5 添加到 disallowed_groups 中。
  • Needs Love
    • needs_love_allowed_groups 上的 can_needs_love? 检查没有使用 _map 扩展,也没有使用 user.in_any_groups?。将 1 添加到该设置的 mandatory_groups 中,并移除 guardian 中的特殊管理员检查。将 0|4|5 添加到 disallowed_groups 中。
  • Staff Alias
    • staff_alias_allowed_groups 上的 can_post_as_staff_alias 检查没有使用 _map 扩展,也没有使用 user.in_any_groups?。将 0|4|5 添加到 disallowed_groups 中。

主题

组件

迁移的下一步

待定(TBA)

2 个赞