通往 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 应该在 disallowed_groups 中添加 0|4|5,这些在这里都没有意义,只有具体组才重要。

其他插件

  • 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?。在 suggested_edits_review_groupsmandatory_groups 中添加 1,并移除 can_review_suggested_edits_in_topic_list 中的管理员特殊情况。
    • suggested_edits_review_groupssuggested_edits_suggest_groupsdisallowed_groups 中添加 0|4|5,此设置并不真正打算与这些伪组一起使用
  • Resenha

主题

组件

低优先级问题

  • 核心
    • 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,这只处理私信
    • about_page_extra_groupsdisallowed_groups 中添加 0|4|5,这是专门用于在关于页面处理具体组的
    • PresenceChannelcan_view? 中注明,当即将进行的更改移动到 Permanent 时,我们需要移除 Group::AUTO_GROUPS[:everyone] 检查

核心插件

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

其他插件

  • Code Review
    • code_review_allowed_groupscan_review_code? 检查没有使用 _map 扩展,也没有使用 user.in_any_groups?。在该设置的 mandatory_groups 中添加 1,并移除 guardian 中的特殊管理员检查。在 disallowed_groups 中添加 0|4|5
  • Needs Love
    • needs_love_allowed_groupscan_needs_love? 检查没有使用 _map 扩展,也没有使用 user.in_any_groups?。在该设置的 mandatory_groups 中添加 1,并移除 guardian 中的特殊管理员检查。在 disallowed_groups 中添加 0|4|5
  • Staff Alias
    • staff_alias_allowed_groupscan_post_as_staff_alias 检查没有使用 _map 扩展,也没有使用 user.in_any_groups?。在 disallowed_groups 中添加 0|4|5

主题

组件

迁移的后续步骤

待定

2 个赞