익명 및 로그인 사용자를 위한 그룹별 세밀한 권한 관리

코드베이스에는 역사적으로 혼란을 초래해 온 @everyone이라는 유사 그룹(pseudogroup)이 있습니다. 이 유사 그룹은 다음과 같은 용도로 사용될 수 있습니다.

  • group_list 유형의 사이트 설정
  • 카테고리 권한
  • 태그 그룹

일부 사용자는 @everyone을 "모든 익명 사용자 및 로그인한 사용자"로 해석하는 반면, 다른 이들은 "로그인한 사용자"만을 의미한다고 해석합니다. 실제로 사이트 설정의 경우, 대부분의 상황에서 @everyone은 "로그인한 사용자"만을 의미합니다.

이러한 혼란을 더욱 가중시키는 요인은, @everyone 그룹이 "모든 익명 및 로그인한 사용자"가 해당 기능에 접근하는 것이 의미가 없는 사이트 설정(예: pm_tags_allowed_for_groups)에도 사용될 수 있다는 사실입니다.

기능 플래깅(feature flagging) 및 개발자 경험 측면에서도 혼란을 유발합니다. 다가오는 변경 사항이나 기타 설정의 경우, 실제로 "모든 익명 및 로그인한 사용자"에게 활성화하기를 원할 수 있기 때문입니다.

해결 방안

우리는 두 개의 별도의 자동 유사 그룹(automatic pseudogroup)을 도입합니다.

  • anonymous_users (ID 4) - 계정이 없이 사이트를 방문하는 익명 사용자를 나타냅니다.
  • logged_in_users (ID 5) - 사이트의 모든 로그인한 사용자를 나타내며, trust_level_0 자동 그룹과 유사한 효과를 가지지만 더 구체적입니다.

이러한 그룹은 이미 도입되었지만, granular_anonymous_and_logged_in_groups_permissions 다가오는 변경 사항이 사이트에 활성화되었을 때만 효력을 발휘합니다.

다가오는 변경 사항이 활성화되면, 선택된 그룹으로 everyone이 지정된 모든 설정은 자동으로 logged_in_users ID로 변환됩니다. 따라서 다가오는 변경 사항을 전환할 때 사이트 설정 테이블의 데이터는 변경되지 않습니다. 다가오는 변경 사항이 영구적(Permanent)이 되면, 이 변경 사항을 반영하기 위해 모든 그룹 설정에 대한 데이터 마이그레이션을 수행할 것입니다.

또한, anonymous_userspersonal_message_enabled_groups와 같이 의미가 없는 여러 사이트 설정의 disallowed_group으로 표시했습니다.

기존 그룹 이름과의 충돌은 자동으로 처리되며, 기존 그룹을 이름 변경하고 게시물의 그룹 언급을 업데이트합니다.

태그 및 카테고리 권한은 어떻게 되나요?

이러한 권한은 변경되지 않습니다. "everyone"의 개념이 몇 가지 측면에서 다르며, 기반이 되는 자동 그룹에 의존하지 않기 때문입니다.

10개의 좋아요

Wait… what :flushed_face: Does that mean all categories that are now public (everyone) will change to closed ones requiring login, when that is enabled?

No, because:

This only affects group list type site settings that currently allow you to select “everyone” like so:

1개의 좋아요

테마 컴포넌트를 어떻게 조정해야 하는지 이해하는 데 도움을 주실 수 있나요?

copy-post 컴포넌트를 예로 들어 시도해 보았습니다. 이 컴포넌트도 기능을 사용하도록 권한을 부여하는 그룹 설정을 사용한다는 기억이 나기 때문이죠. 그리고 제 컴포넌트와 마찬가지로, 사용자가 속한 그룹의 ID를 비교하는 것만으로는 도움이 되지 않기 때문에 ID를 별도로 확인해야 하는 ‘everyone’ 유사 그룹(pseudo-group)에 대한 별도의 체크가 필요했던 이슈가 있었기 때문입니다. 제 이해가 맞다면, 새로운 그룹들도 유사 그룹이므로 ID를 별도로 확인해야 하므로 거기에 최근 변경 사항이 있을 것이라고 기대했습니다. 여기서 이것이 필요하지 않은 이유를 설명하는 무언가를 제가 놓치고 있는 걸까요?

favorite filters 컴포넌트에는 두 가지 그룹 설정이 있습니다. 하나는 그룹이 자체 필터를 저장할 수 있도록 허용하는 것이고, 다른 하나는 표준 필터를 제공하는 것입니다.
기본적으로 trust_level_0 그룹의 멤버만 사용자 정의 필터를 사용할 수 있습니다. 이는 등록된 사용자만 사용자 정의 사용자 필드에 데이터를 저장할 수 있기 때문입니다. 따라서 여기서는 anonymous_users를 선택으로 허용하지 않는 것이 합리적일 것입니다. 테마 컴포넌트에서 이를 어떻게 해야 하나요? 이미 그런 예시가 있나요?

기본 필터의 기본 설정은 "everyone"입니다. 미등록 사용자도 기본 필터를 보고 사용할 수 있는 것이 유용하다고 생각하기 때문입니다. 문제는 제가 명시적으로 "everyone"을 선택했음에도 불구하고 everyone이 'logged_in_users’로 변경된다는 것입니다. 현재 everyone을 사용 중인 관리자가 향후에도 미등록 사용자를 위한 필터를 계속 가질 수 있도록 커스텀 마이그레이션을 만들어야 하나요? 이 마이그레이션은 언제 실행되어야 하나요? 아니면 마이그레이션을 실행한 후 각 관리자가 개별적으로 이를 변경해야 하나요?

제가 걱정하고 있는 이 모든 것이 실제로는 불필요한 것일까요? 조정이 필요하다면, 잠재적으로 영향을 받을 수 있는 커뮤니티 유지 관리 컴포넌트의 수를 고려할 때 4주 미만은 상당히 짧은 기간으로 느껴집니다.
“copy-post” 외에도 unanswered filter component도 살펴보았지만, 거기서도 변경 사항을 찾을 수 없었습니다. 제가 중요한 무언가를 놓치고 있는 것 같습니다.毕竟, 이 변경 사항은 거의 일주일 전부터 기본적으로 활성화되었기 때문입니다. 조정이 필요하다면 공식 컴포넌트가 이미 업데이트되었을 것이라고 가정합니다.

1개의 좋아요

게시물 3개가 기존 주제에 병합되었습니다: Modernizing the Foundation theme

이러한 컴포넌트들을 살펴보면, currentUser?.groups는 어차피 신뢰할 수 없습니다. 이는 사용자에게 보이는 그룹만 포함하기 때문이며, 권한에 영향을 미치는 사용자가 속해 있는 그룹들은 여기에 직렬화되지 않을 수 있습니다:

코어/플러그인에서는 현재 사용자 직렬화기에서 다음과 같은 방식으로 이 문제를 우회하고 있습니다:

하지만 당연히, 이는 테마 컴포넌트/테마 및 그 설정에서는 사용할 수 없습니다.

음, 확실하지 않아서 좀 더 생각해보아야 할 것 같습니다. 만약 정말로 everyone을 의미했다면, logged_in_usersanonymous_users 모두로 변경되어야 합니다. 이것이 OP에서 언급된 everyone의 주요 문제점이었습니다. 일부는 이를 로그인한 사용자만 의미한다고 해석했고, 다른 일부는 로그인한 사용자 + 비로그인 사용자를 포함한다고 해석했으며, 이는 매우 상황 의존적이었습니다.

보안 관점에서 더 안전하기 때문에 "로그인한 사용자만"이라는 해석을 선택했습니다.

아니요, 그냥 테마 컴포넌트/테마 및 그 설정이 이 변경 사항에 어떻게 영향을 받는지 고려하지 않았을 뿐입니다. 저는 주로 사이트 설정에 집중하고 있었습니다. 특히 이런 것들은 AUTO_GROUPS 상수조차 사용하지 않기 때문에 찾기 매우 어려울 것입니다:

image

어쨌든, 이 문제들에 대한 해결책을 찾아보겠습니다. 해결책을 도출하기 전까지는 이 변경 사항을 Stable로 진행하지 않을 것입니다.

5개의 좋아요

간단한 업데이트입니다. 이 문제를 처리할 방법에 대한 아이디어가 있고, 내부적으로 논의 중입니다. 오래 걸리지 않을 거예요 :crossed_fingers:

1개의 좋아요

저는 정확히 이 경우입니다 :upside_down_face:; 따라서 등록한 사용자만 사용할 수 있는 카테고리를 만들려면 접근 권한을 TL0으로만 설정하고, TL0 자동 사용자 그룹에 의존하여 로그인한 사용자와 게스트를 구분하고 있습니다.

이 용어가 다른 컨텍스트에서 갖는 의미를 구별하는 표가 있는지 궁금합니다. 이러한 차이는 혼란스럽고 불안감을 줍니다. 왜냐하면 사람들이 처음에 이 설정을 선택했을 때 실제 의미를 몰랐을 가능성이 크기 때문에, 관련 설정을 확인하고 싶어할 것입니다. 현재 저는 그룹이 설정된 각 장소를 개별적으로 확인하고, Granular group 기능이 활성화된 후로 변경된 대상을 보고 그것이 원래 무엇을 의미했는지 확인해야 합니다. 이는 어둠 속에서 더듬는 것과 같은 느낌입니다.

3개의 좋아요

좋은 아이디어입니다… AI를 활용하여 그룹 기반 설정이 사용되는 모든 위치를 조사하고, anonymous가 해당 항목에 접근할 수 있는지 여부를 출력하게 하는 방법을 찾아볼 수 있을 것 같습니다.

anonymous_users 그룹이 선택되지 않도록 막아두는 설정들이 이미 여러 개 있으므로, 이는 좋은 출발점이 될 것입니다… 조사 결과를 이곳에 다시 보고하겠습니다.

이와 관련하여 현재 작업 중인 PR들이 있습니다:

곧 후속 PR 및 문서 변경 사항이 있을 예정입니다.

4개의 좋아요

@Noble_Fish , 여기는 그룹 기반 설정, 각 설정의 용도, 그리고 익명/로그인된 사용자가 해당 설정에 어떻게 적용되는지에 대한 AI가 생성한 목록입니다. 이 내용이 정상이라고 상당히 확신하지만, AI가 생성한 내용인 만큼 사실관계를 직접 다시 한번 확인해 보시는 것이 좋습니다.

가장 흥미로운 열은 "변경 전 everyoneanonymous_users도 포함되었는가?"라고 생각됩니다. 이 값이 Yes라면, 이번 예정된 변경 사항이 적용되기 전까지 everyone은 로그인된 사용자 그리고 익명 사용자를 모두 의미했다는 뜻입니다.

확인하실 수 있듯이 해당 항목은 몇 개에 불과하므로, 관리자가 사이트 설정에서 anonymous_users를 명시적으로 추가해야 하는 것도 이 항목들뿐입니다:

  • hidden_post_visible_groups - 이 설정은 anonymous_users를 허용하도록 실제로 변경해야 합니다. 이번 예정된 변경 사항에 대해 코드가 정확하지 않습니다.
  • lazy_load_categories_groups - 이 설정도 수정이 필요합니다. user.in_any_groups? 내부에서 이미 수행되는 중복된 everyone 체크를 하고 있습니다.
  • styleguide_allowed_groups - 현재 상태로는 작동하지만, 이것도 조금 조정할 것입니다.

이번 예정된 변경 사항이 영구화되면, logged_in_usersanonymous_users 그룹이 전적으로 사용되고 everyone은 삭제됩니다.


설정 설명 logged_in_users 적용 여부? anonymous_users 적용 여부? 변경 전 everyoneanonymous_users도 포함되었는가? 코드 분석
whispers_allowed_groups 지정된 그룹의 멤버가 주제 내에서 비공개 통신을 사용할 수 있도록 허용합니다. 아니오 아니오 아니오 everyone, logged_in_users, anonymous_users는 허용되지 않으며; 런타임도 구체적/그룹 멤버십을 기대합니다.
hidden_post_visible_groups 이 그룹의 멤버가 숨겨진 게시물을 볼 수 있도록 허용합니다. 스태프 사용자는 항상 숨겨진 게시물을 볼 수 있습니다. 아니오 익명 사용자를 거부하기 전에 everyone을 확인합니다; 그렇지 않으면 in_any_groups?를 사용합니다.
about_page_hidden_groups 특정 그룹의 멤버를 /about 페이지에 표시하지 않습니다. 아니오 아니오 아니오 group_users를 사용합니다; 의사그룹(pseudogroups)에는 멤버 행이 없습니다.
about_page_extra_groups 관리자 아래에 표시할 그룹입니다. 아니오 아니오 아니오 표시를 위해 구체적 그룹과 멤버를 로드합니다.
anonymous_posting_allowed_groups 익명 게시를 활성화할 수 있는 그룹입니다. 아니오 아니오 in_any_groups?를 통한 로그인 사용자 게이트; anonymous_users는 허용되지 않습니다.
personal_message_enabled_groups 이 그룹의 사용자가 개인 메시지를 생성할 수 있도록 허용합니다. 아니오 아니오 in_any_groups?를 통한 로그인 사용자 게이트; anonymous_users는 허용되지 않습니다.
shared_drafts_allowed_groups 이 그룹의 사용자가 공유 초안을 보고 편집할 수 있도록 허용합니다. 아니오 아니오 로그인 가디언 게이트; anonymous_users는 허용되지 않습니다.
here_mention_allowed_groups @here를 멘션할 수 있는 그룹입니다. 아니오 아니오 인증된 사용자가 필요합니다; anonymous_users는 허용되지 않습니다.
approve_unless_allowed_groups 이 그룹에 속하지 않은 사용자의 게시물은 승인되어야 합니다. 아니오 아니오 in_any_groups?를 통한 사용자 게이트; anonymous_users는 허용되지 않습니다.
approve_new_topics_unless_allowed_groups 이 그룹에 속하지 않은 사용자의 새 주제는 승인되어야 합니다. 아니오 아니오 in_any_groups?를 통한 사용자 게이트; anonymous_users는 허용되지 않습니다.
skip_review_media_groups 이 그룹 외부의 사용자는 임베드된 미디어가 포함된 게시물이 검토로 전송됩니다. 아니오 아니오 in_any_groups?를 통한 사용자 게이트; anonymous_users는 허용되지 않습니다.
content_localization_allowed_groups 지역화된 콘텐츠를 업데이트할 수 있는 그룹입니다. 아니오 아니오 가디언/사용자 게이트; anonymous_users는 허용되지 않습니다.
email_in_allowed_groups 이메일을 통해 새 주제를 게시할 수 있는 그룹입니다. 아니오 아니오 이메일 발신자 사용자 게이트; anonymous_users는 허용되지 않습니다.
view_raw_email_allowed_groups 수신된 이메일의 원시 콘텐츠를 볼 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
uploaded_avatars_allowed_groups 사용자 지정 프로필 사진을 업로드할 수 있는 그룹을 지정합니다. 아니오 아니오 현재/대상 사용자 게이트; anonymous_users는 허용되지 않습니다.
create_topic_allowed_groups 새 주제를 생성할 수 있는 그룹입니다. 아니오 아니오 사용자가 필요하고 in_any_groups?를 사용합니다; anonymous_users는 허용되지 않습니다.
topic_timers_allowed_groups 주제 타이머를 설정할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
edit_wiki_post_allowed_groups 위키로 표시된 게시물을 편집할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
edit_post_allowed_groups 게시물을 편집할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
self_wiki_allowed_groups 이 그룹의 사용자가 자신의 게시물을 위키로 만들 수 있도록 허용합니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
send_email_messages_allowed_groups 이메일을 통해 개인 메시지를 보낼 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
flag_post_allowed_groups 게시물을 플래그할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
post_links_allowed_groups 게시물에 링크를 포함할 수 있는 그룹입니다. 아니오 아니오 인증된 사용자가 필요합니다; anonymous_users는 허용되지 않습니다.
embedded_media_post_allowed_groups 이 그룹의 사용자는 게시물에 미디어 항목을 임베드할 수 있습니다. 아니오 아니오 동작 사용자 게이트; anonymous_users는 허용되지 않습니다.
profile_background_allowed_groups 프로필 배경을 업로드할 수 있는 그룹입니다. 아니오 아니오 사용자 게이트; anonymous_users는 허용되지 않습니다.
user_card_background_allowed_groups 사용자 카드 배경을 업로드할 수 있는 그룹입니다. 아니오 아니오 사용자 게이트; anonymous_users는 허용되지 않습니다.
invite_allowed_groups 사용자를 초대할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
ignore_allowed_groups 다른 사용자를 무시할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
delete_all_posts_and_topics_allowed_groups 다른 사용자가 생성한 게시물과 주제를 삭제하고 삭제된 콘텐츠를 볼 수 있는 그룹입니다. 아니오 아니오 가디언/현재 사용자 게이트; anonymous_users는 허용되지 않습니다.
edit_all_topic_groups 이 그룹의 사용자가 다른 사용자의 주제 제목, 태그, 카테고리를 편집할 수 있도록 허용합니다. 아니오 아니오 원시 분할 후 in_any_groups?; anonymous_users는 허용되지 않습니다.
edit_all_post_groups 이 그룹의 사용자가 다른 사용자의 게시물을 편집할 수 있도록 허용합니다. 아니오 아니오 in_any_groups?를 통한 사용자 게이트; anonymous_users는 허용되지 않습니다.
change_post_ownership_allowed_groups 이 그룹의 사용자가 게시물 소유권을 변경할 수 있도록 허용합니다. 아니오 아니오 현재 사용자 게이트; anonymous_users는 허용되지 않습니다.
cross_origin_opener_unsafe_none_groups 숨겨진 COOP 오버라이드 그룹; 일치하는 사용자는 Cross-Origin-Opener-Policy: unsafe-none을 받습니다. 아니오 아니오 current_user.present?가 필요합니다; 익명 선택에는 런타임 효과가 없습니다.
user_api_key_allowed_groups 사용자 API 키 생성에 필요한 그룹 멤버십입니다. 아니오 아니오 현재 사용자 게이트; anonymous_users는 허용되지 않습니다.
create_tag_allowed_groups 태그를 생성할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
edit_tags_allowed_groups 태그, 태그 설명, 태그 동의어를 편집할 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
tag_topic_allowed_groups 주제에 태그를 붙일 수 있는 그룹입니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
pm_tags_allowed_for_groups 포함된 그룹의 멤버가 어떤 개인 메시지에든 태그를 붙일 수 있도록 허용합니다. 아니오 아니오 가디언 사용자 게이트; anonymous_users는 허용되지 않습니다.
lazy_load_categories_groups 이 그룹의 사용자만 카테고리 정보를 지연 로드합니다. 명시적 everyone 체크와 가디언 in_any_groups?; anonymous_users는 의미 있습니다.
chat_allowed_groups 이 그룹의 사용자는 채팅을 사용할 수 있으며, 익명 사용자는 이 설정에 추가된 경우에만 채팅을 볼 수 있습니다. 아니오 로그인 채팅은 in_any_groups?를 사용하며; 익명 공개 채팅은 anonymous_users를 명시적으로 확인합니다.
direct_message_enabled_groups 이 그룹 내의 사용자가 사용자 간 개인 채팅을 생성할 수 있도록 허용합니다. 아니오 아니오 로그인 채팅 가디언 게이트; 의미 있는 익명 DM 경로는 없습니다.
chat_pinning_messages_allowed_groups 이 그룹의 사용자는 채팅 메시지를 고정할 수 있습니다. 아니오 아니오 채팅 접근/현재 사용자가 필요합니다; 익명 고정 경로는 없습니다.
chat_message_flag_allowed_groups 이 그룹의 사용자는 채팅 메시지를 플래그할 수 있습니다. 아니오 아니오 사용자 게이트; 익명 경로는 주변 채팅 권한에 의해 차단됩니다.
no_ads_for_groups 이 그룹의 사용자에게 광고를 표시하지 않습니다. 아니오 아니오 current_user 직렬화에만 추가됩니다; 익명 현재 사용자 페이로드는 없습니다.
adsense_exclude_groups 이 그룹의 멤버에게 광고가 표시되지 않습니다. 아니오 아니오 in_any_groups?를 통한 현재 사용자 광고 플래그; 익명 현재 사용자 페이로드는 없습니다.
dfp_exclude_groups 이 그룹의 멤버에게 광고가 표시되지 않습니다. 아니오 아니오 in_any_groups?를 통한 현재 사용자 광고 플래그.
amazon_exclude_groups 이 그룹의 멤버에게 광고가 표시되지 않습니다. 아니오 아니오 in_any_groups?를 통한 현재 사용자 광고 플래그.
carbonads_exclude_groups 이 그룹의 멤버에게 광고가 표시되지 않습니다. 아니오 아니오 in_any_groups?를 통한 현재 사용자 광고 플래그.
adbutler_exclude_groups 이 그룹의 멤버에게 광고가 표시되지 않습니다. 아니오 아니오 in_any_groups?를 통한 현재 사용자 광고 플래그.
composer_ai_helper_allowed_groups 이 그룹의 사용자는 작성기에 AI 헬퍼 버튼을 봅니다. 아니오 아니오 in_any_groups?를 통한 로그인 AI 헬퍼 게이트.
post_ai_helper_allowed_groups 게시물에서 AI 헬퍼 기능을 사용할 수 있는 사용자 그룹입니다. 아니오 아니오 in_any_groups?를 통한 로그인 AI 헬퍼 게이트.
ai_pm_summarization_allowed_groups 개인 메시지(PM)에서 요약 생성 및 볼 수 있는 그룹입니다. 아니오 아니오 아니오 원시 user.group_ids를 사용하므로 의사그룹은 일치하지 않습니다.
ai_bot_debugging_allowed_groups 원시 AI 요청 및 응답을 보여주는 디버그 버튼을 볼 수 있는 그룹입니다. 아니오 아니오 익명에 대해 명시적으로 false를 반환한 후 in_any_groups?를 사용합니다.
ai_bot_allowed_groups GPT 봇이 PM에 접근할 때, 이 그룹의 멤버에게 답변합니다. 아니오 아니오 주요 게이트는 in_any_groups?를 사용하며; 하나의 플레이그라운드 경로는 원시 group_ids를 사용합니다.
ai_bot_public_sharing_allowed_groups 이 그룹이 고유한 링크를 통해 AI 개인 메시지를 공개적으로 공유할 수 있도록 허용합니다. 아니오 아니오 익명에 대해 명시적으로 false를 반환한 후 in_any_groups?를 사용합니다.
assign_allowed_on_groups 이 그룹의 사용자는 주제를 할당할 수 있습니다. 아니오 아니오 아니오 원시 user.group_ids/GroupUser를 사용합니다; 의사그룹에는 행이 없습니다.
discourse_post_event_allowed_on_groups 이벤트를 생성할 수 있는 그룹입니다. 아니오 아니오 아니오 원시 groups.where(id: ...); everyone은 특수 처리되지만 logged_in_users는 아닙니다.
discourse_kanban_manage_board_allowed_groups 칸반 보드를 생성하고 구성할 수 있는 그룹입니다. 아니오 아니오 가디언은 in_any_groups?를 사용하지만, 쓰기 컨트롤러는 로그인을 요구합니다.
create_policy_allowed_groups 게시물에 정책을 추가하는 데 필요한 그룹 멤버십입니다. 아니오 아니오 in_any_groups?를 통한 게시물/사용자 게이트.
flag_posts_voting_comments_allowed_groups 게시물 투표 댓글을 플래그할 수 있는 그룹입니다. 아니오 아니오 in_any_groups?를 통한 사용자 게이트.
allow_solved_in_groups 이 그룹의 그룹 메시지에서 솔루션 표시를 허용합니다. 사용자 게이트 없음 사용자 게이트 없음 사용자 게이트 없음 현재 사용자 멤버십이 아닌 PM topic.allowed_groups와 일치합니다.
accept_all_solutions_allowed_groups 어떤 주제에서든 솔루션을 수락할 수 있는 그룹입니다. 아니오 아니오 in_any_groups?를 통한 인증/현재 사용자 게이트.
discourse_templates_groups_allowed_private_templates 개인 템플릿을 사용할 수 있는 그룹입니다. 아니오 아니오 아니오 원시 GroupUser.exists?; 오직 everyone만 특수 처리됩니다.
poll_create_allowed_groups 투표를 생성할 수 있는 그룹입니다. 아니오 아니오 in_any_groups?를 통한 동작/현재 사용자 게이트.
styleguide_allowed_groups 스타일 가이드의 가시성을 제공된 그룹의 멤버로 제한합니다. 컨트롤러가 anonymous_users를 명시적으로 처리합니다; 변경 전에는 everyone을 통해 익명도 허용했습니다.
3개의 좋아요

이러한 수정 사항들을 새로운 PR로 분리해 주세요:

2개의 좋아요

@moin 이 PR DEV: Add resolve_group_membership functionality to theme settings - Pull Request #41360 - discourse/discourse - GitHub 이 이제 병합되었고, 저는 DEV: Docs for theme setting resolve_group_membership - Pull Request #41537 - discourse/discourse - GitHub 에서 문서를 추가하고 있습니다. DEV: Use resolve_group_membership core theme functionality - Pull Request #37 - discourse/discourse-copy-post - GitHub 로 discourse-copy-post를 수정했으며, 이제 다른 공식 플러그인들 중 동일한 처리가 필요한 것이 있는지 확인하고 있습니다 (예: 이미 GitHub - discourse/discourse-unanswered-filter · GitHub 를 지적해 주셨죠).

당신의 Filter Favorites 에 대해서는 제가 만든 copy-post 예시를 참고할 수 있지만, 기본적으로 default_favorite_filters_groupscustom_favorite_filters_allowed_groups 모두에 resolve_group_membership: true를 추가해야 합니다. 그러면 settings에서 사용자의 그룹 멤버십에 따라 각각 settings.user_in_default_favorite_filters_groupssettings.user_in_custom_favorite_filters_allowed_groups라는 불리언 값으로 사용 가능하게 되며, 이제 프론트엔드에서 사용자 그룹 ID를 수동으로 확인하는 필요가なくなります.

곧 폐지될 0 (everyone) 대신 로그인된 사용자 및 익명 사용자인 4|5로 테마 컴포넌트에서 default_favorite_filters_groups의 기본값을 변경하는 것이 좋습니다.

everyone 그룹을 제거할 때 테마 설정에 대한 DB 마이그레이션을 실행하도록 메모해 두겠습니다. 사이트 설정에 대해서도 하나 수행해야 하며, 이는 다가오는 변경 사항이 향후 몇 주 내에 영구적으로 적용될 때 이루어질 것입니다 (다른 문제가 발생하는지와 resolve_group_membership이 추가되어야 하는 다른 테마/컴포넌트를 수정하는 속도에 따라 달라집니다).

현재 사이트 설정과 달리 이를 수행할 방법이 없습니다… 지금 바로 추가할 필요는 없다고 생각하며, 설정 설명에 이를 언급하고 프론트엔드에서 currentUser로 가드하는 것으로 충분합니다. 필요성이 더 증가하면 미래에 추가할 수도 있습니다.

4개의 좋아요

이것은 객체 설정의 groups 타입에도 적용되나요?

아니, 그렇게 해야 하나요? 이 기능에 대해 몰랐는데, 권한에 사용되는지 모르겠어요.

이것이 예를 들어 Group Sidebar Menus 에서 사용되어 관리자가 각 사이드바 섹션을 볼 수 있는 그룹을 구성할 수 있게 하고, Notification Banners 에서 각 배너의 가시성을 구성하는 데 사용된다고 생각합니다.

adds component 에서도 이를 사용하실 거라고 가정했습니다. 하지만 그룹 이름 문자열에 의존하는 것 같습니다.

저는 그룹 유형 설정을 선호합니다. 왜냐하면 드롭다운을 통해 관리자가 그룹을 쉽게 입력할 수 있게 해주기 때문이고, 이는 이름보다 변경 가능성이 낮은 그룹 ID에 의존하기 때문입니다. 또한, 객체 설정의 그룹 목록과 목록 유형이 동일한 방식으로 작동하지 않는 것은 혼란스럽다고 생각합니다.

저에게 있어, "everyone"을 작성하면 방문자에게 작동하지 않기 때문에 "trust_level_0"가 되는 것은, 드롭다운이 "anonymous_users"를 명시적으로 제공하지만 작동하지 않는다고 말하더라도 새로운 버전과 다릅니다. 설명에 언급하는 것으로 충분했다면, 사이트 설정에도 같은 조치를 취할 수 있었을 것입니다. 두 유형의 설정을 모두 사용하는 관리자 입장에서, 일부 장소에서는 작동하지 않는 그룹이 숨겨지고 다른 장소에서는 숨겨지지 않는 이유를 이해하기 어렵습니다. 이는 컴포넌트 제작자가 신경 쓰지 않았기 때문이 아니라, 아직 해당 장소에서는 이것이 불가능하기 때문입니다.

3개의 좋아요

예를 들어 찾아줘서 감사합니다. 이제 이 변경 사항을 그룹 유형을 사용하는 테마 설정 객체에 반영해야겠습니다. 예를 들어 그룹 사이드바 메뉴의 이 설정처럼, 저는 동일한 방식으로 작동하도록 만들 것입니다. 그러면 설정에서 다음과 같이 사용하게 됩니다:

groups:
  type: groups
  required: true
  resolve_group_memberships: true
  validations:
    max: 20

그런 다음 클라이언트에서는 groups가 불리언 값인 user_in_groups가 됩니다.

disallowed_groups 기능은 실제로 그렇게 어렵지 않을 수 있습니다… 위 내용을 다시 가져와서 anonymous_users를 제거하려면 다음과 같이 됩니다:

groups:
  type: groups
  required: true
  resolve_group_memberships: true
  disallowed_groups: "4"
  validations:
    max: 20

그리고 일반 그룹 유형 테마 설정의 경우:

copy_button_allowed_groups:
  type: list
  list_type: group
  default: "11" # trust_level_1
  disallowed_groups: "4" # anonymous_users
  description: "복사 버튼을 사용할 수 있는 그룹을 선택하세요."
  resolve_group_membership: true

이 기능을 추가하는 방법에 대해 알아보겠습니다.

2개의 좋아요

아래 PR에서 이를 구현했습니다:

그리고 @Lilly 님, 포크를 통해 group-sidebar-menus 테마 컴포넌트에 대해 이 기능을 하위 호환 방식으로 적용하는 PR을 만들었습니다:

다음으로 disallowed_groups 부분을 작업할 예정입니다.

2개의 좋아요

고마워요! 내일 시간이 나면 한번 봐볼게요 :chefs_kiss:

2개의 좋아요

이 PR에서 완료했습니다 :slight_smile:

4개의 좋아요

제 테마 컴포넌트에 대한 PR과 코드 수정(문법도 일부 정리해 주셨더군요)을 다시 한번 감사드립니다. :hugs:

해당 PR을 확인해 봤는데, 정말 훌륭한 개선입니다. 그룹 목록 설정에서 특정 그룹을 허용하지 않는 방식으로 특정 그룹을 세밀하게 지정할 수 있는 기능이 유용할 것입니다.

3개의 좋아요