这是 Granular group-based permissions for anonymous and logged in users 的配套主题,目前仍在进行中(WIP)。
在核心、插件和主题的各种代码库中,仍有一些地方直接引用 everyone 或 (0) 组 ID,而没有考虑到即将进行的更改,也没有使用 user.in_any_groups? 或用于处理此问题的各种 Guardian 方法。
为方便参考,以下是一些自动组 ID:
0-everyone1-admins2-moderators3-staff4-anonymous_users5-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?
- Guardian 扩展中的
-
- AiBot::Playground 中的
can_attach?未使用user.in_any_groups?
- AiBot::Playground 中的
-
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.groups和everyone的客户端检查。将activity_pub_post_status_visibility_groups的默认值更改为4|5。
- 移除
- Suggested Edits
user_in_suggested_edits_group?需要在GuardianExtensions中使用user.in_any_groups?。将1添加到suggested_edits_review_groups的mandatory_groups中,并移除can_review_suggested_edits_in_topic_list中的管理员特殊情况。- 将
0|4|5添加到suggested_edits_review_groups和suggested_edits_suggest_groups的disallowed_groups中,此设置并非真正设计用于这些伪组。
- Resenha
- 移除
public_room_message_bus_targets中的untargetable_group_ids变通方法,因为此问题已在 FIX: Handle new pseudogroups in message bus group IDs (#42610) · discourse/discourse@699ad46 · GitHub 中得到解决。 - 将
resenha_allowed_groups的默认值从0更改为4|5。
- 移除
主题
组件
低优先级问题
- 核心
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_groups的disallowed_groups中,这旨在仅处理关于页面中的具体组 - 在
PresenceChannel的can_view?中注明,当此即将进行的更改移至Permanent时,我们需要移除Group::AUTO_GROUPS[:everyone]检查
核心插件
- Chat
- 注明在聊天自动加入/自动离开逻辑和
users_with_unreads的各个地方中的everyone_allowed,当此即将进行的更改移至Permanent时,需要移除:everyone检查 - 更新
Chat::Publisher中的chat_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
- 移除 plugin.rb 中的
其他插件
- 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
主题
组件
迁移的下一步
待定