이 주제는 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
이 주제는 안정화(stable)에 가까워지는 동안 이 시스템의 수정 사항을 추적하기 위한 중앙 집중식 장소로 사용됩니다. Discourse 고객을 위한 커스텀 플러그인과 테마는 여기서 추적되지 않으며, 이 부분에 대해서는 내부적으로 별도의 목록을 유지할 것입니다.
고우선순위 문제
Moin이 제기한 문제:
- 코어
- About -
apply_excluded_groups는about_page_hidden_groups의 그룹에서 선택된 관리자 및 운영자를 숨기는 데만 사용됩니다.0|4|5와 같은 의사 그룹(pseudogroups)을 여기에 사용하는 것은 의미가 없으며,disallowed_groups에 추가되어야 합니다. 설정 설명이 오해를 불러일으킬 수 있으므로 설명도 업데이트해야 합니다. - EditCategoryTabsController -
_wouldLoseAccess에서 discourse/frontend/discourse/admin/controllers/edit-category/tabs.js at 86552acfbaf816db3b9db5f761f5e9f2bd221c21 · discourse/discourse · GitHub 가시적인 그룹만 보고 있는데, 이는 ACL에 대한evaluate와 같은 서버 측 검사여야 합니다.
- About -
코어 플러그인
- 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?를 사용하지 않습니다.
- 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
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를 추가하십시오. 이 설정은 이러한 의사 그룹과 함께 사용하도록 의도된 것이 아닙니다.
- Resenha
- https://github.com/discourse/discourse/commit/699ad46536f619396e73720c7652dbfc7a1f86c0에서 처리되었으므로
public_room_message_bus_targets의untargetable_group_ids워크어라운드를 제거하십시오. resenha_allowed_groups의 기본값을0에서4|5로 변경하십시오.
- https://github.com/discourse/discourse/commit/699ad46536f619396e73720c7652dbfc7a1f86c0에서 처리되었으므로
테마
컴포넌트
저우선순위 문제
- 코어
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_groups의disallowed_groups에0|4|5를 추가하십시오. 이는 소개 페이지에서 구체적인 그룹만 다루도록 의도된 것입니다.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?도 사용하지 않습니다. 설정의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를 추가하십시오.
테마
컴포넌트
마이그레이션을 위한 다음 단계
TBA