granular_anonymous_and_logged_in_groups_permissions 迈向稳定,继而成为永久特性

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


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

为方便参考,以下是一些自动组 ID:

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

本主题旨在作为一个中心位置,以便我们在接近稳定版时跟踪此系统的修复情况。Discourse 客户的自定义插件和主题不在此处跟踪,我将在内部维护一份单独的列表。

高优先级问题

Moin 提出的问题:

  • 核心
    • 关于页面 - apply_excluded_groups 仅用于从 about_page_hidden_groups 中的组中隐藏选定的版主和管理员。在这里使用像 0|4|5 这样的伪组没有意义,它们应该被添加到 disallowed_groups 中。我们还需要更新设置描述,因为它具有误导性。

核心插件

  • 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
    • 移除 showStatusToUseruser.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 作为 mandatory_values 添加到 whispers_allowed_groups 设置中
    • 0|4 添加到 allow_solved_in_groups 站点设置的 disallowed_groups 中,这仅处理私信
    • 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

主题

组件

迁移的下一步

待定

2 个赞