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이 제기한 이슈:

Core 플러그인

  • 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-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
    • 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_groups1을 추가하고 can_review_suggested_edits_in_topic_list의 관리자 특수 케이스를 제거하십시오.
    • suggested_edits_review_groupssuggested_edits_suggest_groupsdisallowed_groups0|4|5를 추가하십시오. 이 설정은 이러한 의사그룹과 함께 사용하도록 의도된 것이 아닙니다.
  • Resenha

테마

컴포넌트

저우선순위 이슈

  • Core
    • TopicGuardianis_in_edit_topic_groups는 사이트 설정에 대해 _map 확장을 사용해야 합니다.
    • Roleable#whisperer?user.in_any_groups?를 사용하고 관리자 체크를 제거해야 하며, whispers_allowed_groups 설정의 mandatory_values1을 추가해야 합니다.
    • allow_solved_in_groups 사이트 설정의 disallowed_groups0|4를 추가하십시오. 이 설정은 PM(개인 메시지)만 다룹니다.
    • about_page_extra_groupsdisallowed_groups0|4|5를 추가하십시오. 이 설정은 소개 페이지에서 구체적인 그룹만 다뤄야 합니다.
    • PresenceChannelcan_view?에서 이 예정된 변경 사항이 Permanent로 이동할 때 Group::AUTO_GROUPS[:everyone] 체크를 제거해야 한다는 주석을 남겨야 합니다.

Core 플러그인

  • Chat
    • 채팅의 자동 참여/자동 이탈 로직 및 users_with_unreads의 여러 곳에서 everyone_allowed에 대해 이 예정된 변경 사항이 Permanent로 이동할 때 :everyone 체크를 제거해야 한다는 주석을 남겨야 합니다.
    • FIX: Handle new pseudogroups in message bus group IDs - Pull Request #42610 - discourse/discourse - GitHub 에서 MessageBus가 이제 의사그룹을 올바르게 처리할 수 있으므로, Chat::Publisherchat_allowed_group_ids에서 특수 의사그룹을 제거하십시오.
  • Assign
    • plugin.rb의 add_model_callback(Group)을 제거하십시오. 이는 ID 대신 그룹 이름을 보는 관련성 없는/죽은 코드입니다.

기타 플러그인

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

테마

컴포넌트

마이그레이션의 다음 단계

  • AiAgent 모델의 allowed_group_ids 마이그레이션
3개의 좋아요