계층적 그룹 멤버십(그룹 안의 그룹)

러닝 클럽을 위해 팀 구성이 포함된 1년짜리 챌린지를 진행하고 있습니다. 10세 단위 연령대 팀별로 디스코스(Discourse) 그룹을 만들어 @멘션이 가능하고, 필요하면 각 팀만의 대화를 나눌 수 있도록 하려 합니다. 다만, 사람들이 이 기능을 알아채기란 쉽지 않을 것 같습니다. 그래서 각 연령대 팀별로 7개의 그룹을 만들었고, 사람들이 등록할 때마다 수동으로 업데이트해야 하는 상황입니다.

또한, 챌린지에 참여하는 모든 사람을 포함하는 상위 그룹(uber-group)도 만들고 싶습니다. 만약 상위 ‘챌린저스(Challengers)’ 그룹에 19세 이하, 20~29세, 30~39세 등 하위 그룹들을 단순히 포함시킬 수 있다면 훨씬 편할 텐데, 그렇게 하면 하위 그룹만 관리하면 변경 사항이 상위 그룹에 자동으로 반영될 것입니다.

이런 방식으로 구현할 수 있는 방법이 있거나, 향후 추가될 수 있을까요? 아니면 하위 그룹에 있는 모든 사용자를 수동으로 입력해야 하는 건가요? (전체적으로 수백 명의 사용자가 될 것으로 예상되며, 매주 반복해야 하는 작업입니다.)

그룹에 여러 항목을 한꺼번에 추가할 수 있는 ‘Bulk Add to Group’ 기능을 사용하면 타이핑을 훨씬 덜 할 수 있습니다!

완전한 계층적 그룹 멤버십 해석을 구현할 계획은 없는 것 같습니다.

그룹에 일괄 추가(Bulk Add to Group)라는 용어가 계속 혼란을 줍니다. 제가 보기에는 UI에 그런 옵션이 보이지 않거든요. 링크해 주신 2015년 게시물의 스크린샷은 제가 지금 보는 화면과 일치하지 않습니다. 이건 그냥 그룹 안에서 멤버 추가(Add Members) 대화상자를 사용하는 것과 동일한 건가요?

그리고 한 그룹의 멤버 목록을 복사해서 다른 그룹에 일괄 추가하는 방법은 무엇인가요? 제가 현재 생각해 낸 가장 좋은 워크플로우는 멤버 페이지의 텍스트를 복사한 뒤, 스타일에 익숙한 grep(또는 Nisus Writer Pro)을 이용해 사용자 이름을 복사하는 것입니다. 가능은 하지만, 결코 쉬운 방법은 아닙니다.

Meta에서 “그룹에 일괄 추가” 기능에 대한 참고 사항이 꽤 많이 있습니다. 하지만 https://discourse.example.org/admin/groups/bulk에서 해당 기능이 더 이상 활성화되어 있지 않은 것 같고, 빈 페이지만 표시됩니다(관리자 권한이 있는 몇몇 다른 사이트도 확인해 보았습니다). @adamengst님, 혹시 거기서 무언가 보이시나요?

지연해서 죄송합니다—알림을 놓쳤어요. 아니요, https://forum.fingerlakesrunners.org/admin/groups/bulk 에 페이지가 전혀 없어요 (404), 그리고 주요 그룹 페이지는 FLRC Forum 에 있습니다.

어디에도 Bulk Add에 대한 언급을 찾을 수 없어요.

이것은 약간 숨겨진 기능이라고 할 수 있지만, 일괄 초대 기능을 사용하여 기존 사용자를 그룹에 추가할 수 있습니다. 모달에 설명된 대로 이메일 주소와 그룹을 포함한 CSV 파일을 준비한 후 업로드하면 됩니다. 사용자에게 이메일이 전송되지 않습니다.

@tobiaseigen 아하! 해당 이메일 주소가 이미 계정이 있는 경우, 기존 사용자의 그룹 업데이트를 처리할 수 있는지 혹시 알고 계신가요?

네. 제가 말씀드린 것이 바로 이것입니다:

이 기능은 이중 역할을 수행하는 것 같고, UI를 개선할 수 있을 것 같습니다. 제안을 올려보겠습니다.

좋아요, 감사합니다! LibreOffice Calc로 가볼게요! :keyboard:

감사합니다! 점점 더 좋아지고 있네요. 다만 이메일 주소를 기준으로 하면 저에게는 종종 문제가 됩니다. 많은 사람들이 여러 개의 이메일 주소를 사용하는데, 그래서 초대할 때 해당 이메일이 계정과 연결된 것인지, 아니면 혼란을 줄 수 있는(그리고 잠재적으로 두 번째 계정을 만들 수 있는) 다른 것인지 미리 확인해야 하거든요.

기본적으로 이 시스템이 어떻게 작동하는지는 모르겠지만, 그룹이 다른 그룹을 참조할 수 있도록 하는 것이 가장 간단해 보입니다.

사용자 내보내기를 수행한 후, 내보낸 CSV 파일을 사용하여 새 목록을 만들고 대량 초대 기능을 통해 다시 가져오는 방법을 사용할 수 있습니다. 기존 사용자로 시스템을 설정하려면 이 작업을 한 번만 수행하면 되며, 이후에는 새로운 사람이 가입하거나 연령대를 변경할 때 수동으로 처리하면 됩니다.

커뮤니티를 위해 이 과정을 반자동화하는 맞춤형 코드가 필요할 수도 있습니다. 예산이 있다면 Marketplace 채널에 요청 사항을 게시해 보세요.

사용자 내보내기에 대해 좋은 지적이네요. 리스트를 채울 시작용 계정 소스로는 생각해보지 못했네요. 이 아이디어를 좀 더 고민해보고 어떻게 되는지 확인해볼게요.

계층적 그룹(그룹을 그룹의 구성원으로 가지는 구조)을 사용하면 상속된 그룹에서 구성원을 자동으로 제거할 수 있다는 추가적인 장점이 있습니다.

이러한 기능을 “수동으로” 구현하려면, 그룹 멤버십이 상위 계층의 그룹에 의해 상속된 것인지, 아니면 직접 설정된 것인지 기억해 두어야 합니다.

외부 사용자 디렉터리 서비스(LDAP)를 사용하여 계층적 그룹 기능을 구현하는 방법에 대해 의견을 말씀해 주시겠습니까?

@angus 이 스레드의 의도가 GroupAssociatedGroup에서 이미 구현되어 있는지 궁금합니다.

아니요, 해당 기능은 그룹 계층 구조가 아니라 외부 서비스의 그룹을 Discourse 그룹과 동기화하는 것에 관한 것입니다.

이 스레드를 만든 이후, 계층적 그룹에 대한 제 요청이 여전히 완전히 유효하다는 점을 말씀드리고 싶었습니다.

제 경우, 다른 시스템에 등록되는 4개월 동안 연령 기반의 특정 그룹과 모든 연령 기반 그룹을 포괄하는 전체 그룹에 사람들을 추가하고 있기 때문에, 대량 그룹 초대 기능은 적용되지 않습니다.

매주 수동으로 처리하는 것이 얼마나 번거로운지 이제 알았으니, 올해 개발자가 이 과정을 자동화할 수 있는지 알아볼 예정입니다.

@adamengst 여기 진행 상황은 어떻게 되나요?

네, 사실 제 개발자가 레이스 등록에 사용하는 Webscorer의 데이터를 Discourse 그룹과 동기화하는 데 성공했습니다. 이름이 일치해야 하지만, 일치하지 않을 때를 표시해 주는 관리자 페이지를 만들어 주었습니다.

따라서 계층 구조는 없지만, 여러 그룹을 자동으로 채워 넣을 수 있게 되어 제가 가장 필요로 하던 부분이 해결되었습니다.

오픈소스 코드이므로, 동작 방식을 보고 싶으신 분이 계신다면 공유할 수 있을 것 같습니다.

저도 이 건에 대한 직접적인 요청을 받았기 때문에, @SteveDesmond.ca 님이 Discourse 그룹에 글을 작성하기 위해 작성한 코드를 보고 싶으신 분이 있다면 다음 주소에서 확인하실 수 있습니다:

Steve 님은 이 코드에 대한 질문에 기꺼이 답변해 주실 것이라고 하셨습니다.

아담이 이전에 언급한 특정 코드의 개요는 다음과 같습니다:

  1. (L36) 외부 시스템의 모든 사용자 가져오기
  2. (L37) Discourse의 모든 사용자 가져오기
  3. (L38-39) 해당 그룹(global은 이 경우 "슈퍼그룹"입니다)의 모든 멤버 가져오기
  4. (L46-78) 외부 시스템의 각 사용자를 대상으로 Discourse에 존재하는지 확인하고, 이미 속해 있는 그룹과 추가해야 할 그룹을 매핑합니다