Discourse 동적 그룹

:information_source: 요약 그룹 멤버십을 자동으로 관리
:hammer_and_wrench: 레포지토리 링크 https://github.com/communiteq/discourse-dynamic-groups
:open_book: 설치 가이드 Discourse에서 플러그인 설치하는 방법

기능

Discourse 커뮤니티는 배지 소유 여부나 기존 그룹 멤버십과 같은 조건에 기반하여 그룹 멤버십을 자동화할 필요가 있습니다.

일반적인 사용 사례에는 다음이 포함됩니다:

  • ‘구독자(subscribers)’ 그룹에 속하지 않은 사용자

  • #marketplace에서 게시가 금지된 사용자가 아닌 사용자

  • TL0 또는 TL1이지만 TL2는 아닌 사용자

  • 신규 사용자 튜토리얼을 완료했거나 1년 이상 회원인 사용자

  • client_1, client_2 또는 client_3에 속해 있으면서 인턴이 아닌 사용자

이전에는 이러한 문제를 해결하기 위해 그룹을 주기적으로 동기화하는 사용자 정의 스크립트가 필요했습니다. Dynamic Groups 플러그인은 이러한 필요성을 제거합니다.

이 플러그인은 그룹 설정에 부울 표현식 필드를 도입하여 관리자가 그룹 멤버십을 동적으로 결정하는 규칙을 정의할 수 있게 합니다.

예시:

  • ‘구독자(subscribers)’ 그룹에 속하지 않은 사용자
    trust_level_0 AND NOT subscribers

  • #marketplace에서 게시가 금지된 사용자가 아닌 사용자
    trust_level_2 AND NOT banned_users

  • TL0 또는 TL1이지만 TL2는 아닌 사용자
    trust_level_0 AND NOT trust_level_2

  • 신규 사용자 튜토리얼을 완료했거나 1년 이상 회원인 사용자
    badge:certified OR badge:anniversary

  • client 1, 2 또는 3에 속해 있으면서 인턴이 아닌 사용자
    (client_1 OR client_2 OR client_3) AND NOT interns

구성

플러그인이 설치되고 활성화되면 그룹 관리 인터페이스에 새로운 탭이 나타납니다:

부울 표현식을 입력하거나 업데이트하면, 시스템이 몇 초간 해당 조건에 맞는 사용자로 그룹을 채우는 데 시간이 걸립니다. 그 시점부터는 사용자 상태가 변경될 때마다 그룹 멤버십이 자동으로 업데이트됩니다.

중요:
규칙이 정의되면 그룹은 **자동(automatic)**으로 표시되며 수동 멤버 변경이 비활성화됩니다. 그룹을 수동 관리로 되돌리려면 단순히 표현식 필드를 지우면 됩니다. 기존 멤버는 유지되며 수동 제어 권한을 다시 얻게 됩니다.

28개의 좋아요

와! 정말 훌륭한 작업이네요, Richard!

이것은 Discourse의 그룹 관리에서 큰 공백을 메워줍니다. 정말 기쁘고, 잘 활용해 보기를 기대하고 있습니다.

주요 용도로는 기능적 하위 그룹을 활성화하는 데 사용할 예정입니다.

4개의 좋아요

반드시 Discourse의 기능에 없어서는 안 될 추가 요소입니다!

2개의 좋아요

7개의 게시글이 기존 주제에 병합되었습니다: Only the first entry working with Multiselect fields when User first logged in Trigger used

안녕하세요, 정말 유용한 플러그인을 개발해 주셔서 감사합니다!

현재 저는 Discourse Dynamic Groups를 사용하여 비익명(non-anonymous) 사용자를 모두 특수 그룹에 자동으로 추가하고 있습니다. 사용 중인 불리언 표현식은 다음과 같습니다:

NOT anonymous_users

기대 동작:
새 사용자가 가입할 때(anonymous_users 그룹에 속하지 않은 경우), 수동 개입 없이 자동으로 해당 그룹에 추가되어야 합니다.

실제 동작:
새로 가입한 사용자가 즉시 그룹에 추가되지 않습니다. 그룹 설정에서 불리언 표현식을 수동으로 다시 저장해야만 추가됩니다.
즉, 수동 동기화를 트리거하지 않는 한 사용자가 가입해도 그룹이 자동으로 업데이트되지 않습니다.

2개의 좋아요

음… 잘 짚어주셨네요. 그리고 이건 당연히 그렇게 동작해야 한다는 데 저도 동의합니다.

기술적인 관점에서 보면, 이 플러그인은 다음 두 가지 조건에서만 그룹 멤버십을 다시 평가합니다:

  1. 그룹 설정의 불리안 식이 저장될 때
  2. 불리안 식에 언급된 그룹에 사용자가 추가되거나 제거될 때.

새로운 사용자가 등록되는 경우에는 두 가지 조건 모두에 해당하지 않습니다.

식을 trust_level_0 AND NOT anonymous_users로 변경해 보시고, 문제가 해결되는지 알려주시겠어요?

3개의 좋아요

안녕하세요,

다음 식을 사용하려고 하면

trust_level_0 AND NOT anonymous_users

다음과 같은 오류가 발생합니다:
Unknown keyword, group or badge: 'anonymous_users'

그룹 이름을 실제 그룹으로 변경해도, 예를 들어:

trust_level_0 AND NOT interns

여전히 다음과 같은 오류가 나요:
Unknown keyword, group or badge: 'interns'

그룹 관리 페이지에서 그룹의 고유 이름을 직접 복사해 왔기 때문에 오타는 없다고 두 번 확인했습니다.
무엇을 놓치고 있는 것이 있을까요, 아니면 식에서 사용자 정의 그룹이 인식되도록 추가 설정이 필요한가요?

4개의 좋아요

이 문제를 보고해 주셔서 감사합니다.

재현을 시도하던 중 두 가지 버그를 발견했으며, 그중 하나가 사용자에게 영향을 미쳤을 가능성이 높습니다.
플러그인을 최신 버전 59640f1으로 업데이트한 후 문제가 해결되는지 확인해 주시겠습니까?

플러그인은 여전히 그룹 이름 변경을 잘 처리하지 못하고 있습니다. 그룹 이름을 변경한 경우, 해당 그룹에 의존하는 모든 그룹의 규칙을 저장해야 합니다(부울 식 뒤에 공백을 입력했다가 다시 제거하면 저장 버튼이 활성화됩니다). 이 문제는 향후 버전에서 수정될 예정입니다.

3개의 좋아요

이것은 당신의 카테고리 제한기 플러그인을 사용하나요, 아니면 그것과 독립적으로 이 기능을 사용하나요?

공백을 메워주는 멋진 플러그인입니다.

독립적으로 작동합니다.

2개의 좋아요

안녕하세요,

Dynamic Groups 플러그인을 사용 중이며, 기준을 다음과 같이 설정했습니다:

trust_level_0 AND NOT anon_group

하지만 anon_group에 속하지 않는 trust_level_1 사용자들도 이 동적 그룹에 추가되고 있는 것을 확인했습니다.

이것이 의도된 동작인지, 아니면 버그인지 확인해 주실 수 있을까요?

신뢰 수준 1의 사용자는 신뢰 수준 0 그룹의 멤버이기도 합니다. 따라서 이는 예상되는 동작입니다. TL0 사용자만 가져오려면 신뢰 수준 1 그룹을 제외할 수 있습니다. 첫 번째 게시글의 예시와 유사합니다.

2개의 좋아요

정정해 주셔서 감사합니다

저는 이 플러그인을 정말 :heart: 합니다 — 여러 사용 사례에서 정말 유용합니다. 공유하고 유지 관리해 주신 Communiteq 팀에게 다시 한번 감사드립니다!

UX 관련 질문 - Membership 탭 전체를 숨기는 것보다 키 필드만 숨기는 것이 더 나은가요?

Group 페이지의 Membership 탭을 숨긴다는 점을 알아차렸습니다. 말씀하시는 것은 이 탭입니다:

왜 그렇게 하는지는 이해할 수 있지만, Default title, Flair, Effect를 수정하고 싶을 때 몇 가지 문제가 발생합니다.

이것은 브라우저 콘솔에서 탭을 표시하거나 Dynamic Groups 탭의 표현식을 제거하고, 새로고침한 뒤 변경 사항을 적용한 후 다시 붙여넣고, 다시 새로고침하는 방식으로 우회할 수 있습니다.

하지만 전체 탭을 숨기는 것보다 도움이 되지 않는 필드만 숨기는 것이 더 나을 수도 있다고 생각합니다. 아래 이미지와 같은 방식이 더 좋을 것 같습니다:

1개의 좋아요

제안에 동의하지만…

이것은 핵심 기능입니다.
동적 그룹은 "자동"으로 표시된 후 멤버십 탭이 사라집니다.

그렇게는 작동하지 않습니다. Discourse 코어가 아예 탭을 출력하지 않기 때문입니다. 숨겨진 것이 아니라, 단순히 존재하지 않는 것입니다.

1개의 좋아요

아, 네가 답장하기 전에 그 사이에 알아냈어요!! 이걸로 코어 기능에 직접 연결된다는 걸 전에 깨닫지 못했네요. 아주 깔끔하게 잘 만들었네요.

잘못된 제안을 취소했습니다.

그러면 제가 앞서 설명한 다른 우회 방법이 괜찮을 것 같네요.

그런데 또 다른 문제가 하나 더 있는데, 이건 제가 몰랐어요 - 자동 그룹은 비스태프 사용자에게 표시되지 않습니다. 그리고 이건 깊게 코딩되어 있어요. 아니라고!

1개의 좋아요

저도 그 사실을 몰랐습니다!

다음 한 달 이내에 모든 플러그인에 대해 유지보수를 진행할 예정인데, ‘자동’ 플래그를 다시 검토할 필요가 있을 것 같습니다. 제 기억이 맞다면, 그것은 단순히 멤버 추가/제거 기능을 비활성화하기 위한 임시 조치였을 뿐입니다. 다른 모든 것들은 원치 않는 부작용일 가능성이 큽니다.

4개의 좋아요

이 부분에 대해 결론이 났나요?

1개의 좋아요

현재 이 플러그인에는 몇 가지 비추천(deprecation) 통지가 있습니다:

image

image

3개의 좋아요

해결했습니다. 이 문제를 보고해 주셔서 감사합니다! :+1:

3개의 좋아요