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

이 주제는 안정화(stable)에 가까워지는 동안 이 시스템의 수정 사항을 추적하기 위한 중앙 집중식 장소로 사용됩니다. Discourse 고객을 위한 커스텀 플러그인과 테마는 여기서 추적되지 않으며, 이 부분에 대해서는 내부적으로 별도의 목록을 유지할 것입니다.

고우선순위 문제

Moin이 제기한 문제:

코어 플러그인

  • 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에는 0|4|5disallowed_groups에 추가해야 하며, 이 중 어느 것도 여기서 의미가 없고, 구체적인 그룹만 중요합니다.

기타 플러그인

  • 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 설정의 mandatory_values1을 추가해야 합니다.
    • allow_solved_in_groups 사이트 설정의 disallowed_groups0|4를 추가하십시오. 이는 개인 메시지만 다룹니다.
    • about_page_extra_groupsdisallowed_groups0|4|5를 추가하십시오. 이는 소개 페이지에서 구체적인 그룹만 다루도록 의도된 것입니다.
    • 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를 추가하십시오.

테마

컴포넌트

마이그레이션을 위한 다음 단계

TBA

2개의 좋아요