granular_anonymous_and_logged_in_groups_permissions의 안정화 및 영구 적용을 향한 여정

이 주제는 Granular group-based permissions for anonymous and logged in users 의 동반 주제이며, 아직 작업 중(WIP)입니다.


코어, 플러그인, 테마의 다양한 코드베이스에는 여전히 이 예정된 변경 사항을 고려하지 않거나 user.in_any_groups? 또는 이를 처리하는 데 사용되는 다양한 가디언 메서드를 사용하지 않고 everyone 또는 (0) 그룹 ID를 직접 참조하는 곳이 몇 군데 남아 있습니다.

참고를 위해 일부 자동 그룹 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
      • 가디언 확장에서 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
    • user.groups 및 everyone 체크를 하는 클라이언트 측 showStatusToUser 검사를 제거하십시오. activity_pub_post_status_visibility_groups의 기본값을 4|5로 변경하십시오.
  • Suggested Edits
    • GuardianExtensions에서 user_in_suggested_edits_group?는 user.in_any_groups?를 사용해야 합니다. suggested_edits_review_groups의 mandatory_groups에 1을 추가하고 can_review_suggested_edits_in_topic_list의 관리자 특수 사례를 제거하십시오.
    • suggested_edits_review_groups와 suggested_edits_suggest_groups의 disallowed_groups에 0|4|5를 추가하십시오. 이 설정은 원래 이러한 의사그룹과 함께 사용하려는 의도가 아닙니다.
  • Live

테마

컴포넌트

저우선순위 이슈

  • 코어
    • 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를 추가하십시오. 이 설정은 DM(개인 메시지)에만 해당됩니다.
    • about_page_extra_groups의 disallowed_groups에 0|4|5를 추가하십시오. 이 설정은 소개 페이지에서 구체적인 그룹만 다루도록 설계되었습니다.
    • PresenceChannel의 can_view?에 메모를 남기십시오. 이 예정된 변경 사항이 Permanent로 이동하면 Group::AUTO_GROUPS[:everyone] 체크를 제거해야 합니다.

코어 플러그인

  • Chat
  • Assign
    • plugin.rb의 add_model_callback(Group)를 제거하십시오. 이는 그룹 이름 대신 ID를 보는 관련 없는/사망 코드(dead code)입니다.

기타 플러그인

  • Code Review
    • code_review_allowed_groups에 대한 can_review_code? 체크는 _map 확장을 사용하지 않고 user.in_any_groups?도 사용하지 않습니다. 설정의 mandatory_groups에 1을 추가하고 가디언의 관리자 특수 체크를 제거하십시오. disallowed_groups에 0|4|5를 추가하십시오.
  • Needs Love
    • needs_love_allowed_groups에 대한 can_needs_love? 체크는 _map 확장을 사용하지 않고 user.in_any_groups?도 사용하지 않습니다. 설정의 mandatory_groups에 1을 추가하고 가디언의 관리자 특수 체크를 제거하십시오. disallowed_groups에 0|4|5를 추가하십시오.
  • Staff Alias
    • staff_alias_allowed_groups에 대한 can_post_as_staff_alias 체크는 _map 확장을 사용하지 않고 user.in_any_groups?도 사용하지 않습니다. disallowed_groups에 0|4|5를 추가하십시오.

테마

컴포넌트

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

  • AiAgent 모델의 allowed_group_ids 마이그레이션

여기서 처리했습니다: FIX: everyone pseudogroup roadmap part 1 - Pull Request #43798 - discourse/discourse - GitHub