AND 대신 OR을 사용하여 여러 그룹의 사용자를 식별하는 방법?

카테고리와 하위 카테고리를 사용하여 사용자가 ‘OR’ 논리(예: 사용자가 그룹 X 또는 그룹 Y에 속해 있으면 해당 카테고리 또는 하위 카테고리를 볼 수 있음)에 따라 콘텐츠를 볼 수 있도록 하는 것은 쉽습니다.

그렇다면 ‘AND’ 논리를 효과적으로 사용하여, 사용자가 특정 카테고리/하위 카테고리를 보려면 그룹 X와 그룹 Y 둘 다에 속해야 하는 것이 가능한가요?

우리의 사용 사례는 3단계의 접근 권한을 가지고 있다는 것입니다. 이를 1학년, 2학년, 3학년 학생으로 생각하면 이해하기 쉽습니다. 1학년은 1학년 콘텐츠만 볼 수 있고, 2학년은 1학년과 2학년 콘텐츠를 볼 수 있으며, 3학년은 모든 콘텐츠를 볼 수 있습니다. 이 방식은 잘 작동합니다.

우리는 신뢰 수준(Trust Level) 3인 사용자에게 특정 이벤트와 리소스에 대한 조기 접근 권한을 부여함으로써 또 다른 계층을 추가하기를 원합니다.

처음에는 각 학년 수준의 비공개(unlisted) 이벤트를 사용하고, 신뢰 수준 3인 사용자에게 해당 이벤트 링크를 보내는 방식으로 시도했습니다. 그러나 알림 설정에서 1학년, 2학년 또는 3학년을 모니터링하도록 설정한 모든 사용자가 신뢰 수준 3에 국한되지 않고 즉시 해당 이벤트를 볼 수 있었습니다.

또 다른 방법으로는 "신뢰 수준 3 보상"이라는 카테고리를 만들고, 그 안에 1학년, 2학년, 3학년을 위한 하위 카테고리를 만드는 것이 있습니다. 하지만 이렇게 권한을 제한하는 것은 불가능합니다. 1학년, 2학년, 3학년이 해당 카테고리에 대한 가시성을 가져야 하므로, 다시 말해 해당 그룹의 모든 사용자(신뢰 수준과 무관하게)가 하위 카테고리를 볼 수 있게 되기 때문입니다.

매우 번거로운 방법이지만, 신뢰 수준 3인 사용자를 내보내고, 예를 들어 2학년 사용자를 내보낸 후, Excel에서 이를 병합하여 중복된 사용자를 찾아 "신뢰 수준 3 및 2학년"과 같은 이름의 그룹으로 가져오는 방법이 있습니다. 이 방법은 작동하지만 매번 상당한 수작업이 필요하며, 우리는 정기적으로 이 작업을 수행하기를 원합니다.

동일한 결과를 달성할 수 있는 다른 방법에 대한 아이디어가 있을까요? 커스텀 플러그인이나 스크립트라도 최소한 내보내기 및 가져오기 과정을 자동화할 수 있을까요?

미리 감사합니다.

신뢰 수준 3인 대상 그룹의 사용자를 포함하는 새 그룹을 만드는 것이 제가 생각할 수 있는 유일한 방법입니다. Discourse에는 카테고리 보안 권한과 함께 사용할 수 있는 AND 규칙이 없습니다. 하나 이상의 그룹 구성원을 _제외_하는 카테고리 규칙을 만드는 방법에 대한 유사한 질문이 몇 번이나 제기된 바 있습니다.

사이트에서 Data Explorer 플러그인이 사용 가능하다면, 신뢰 수준 3인 대상 그룹의 모든 사용자를 목록으로 반환하는 Data Explorer 쿼리를 사용할 수 있습니다. 사용자가 매우 많지 않다면, 쿼리에서 반환된 사용자 이름을 그룹의 사용자 추가(Add Users) 양식에 직접 복사/붙여넣기할 수 있어야 합니다. Discourse는 이미 해당 그룹에 존재하는 사용자 이름을 이 양식에 추가하는 것을 처리하는 것 같으므로, 쿼리를 주기적으로 실행하면 반환된 사용자 이름을 계속 복사하여 그룹의 사용자 추가 양식에 붙여넣기만 하면 됩니다. 참고로, 이 양식에 붙여넣을 수 있는 최대 사용자 이름 수는 정확히 모르겠습니다. 80명의 사용자로 테스트해 보았는데 문제는 없었습니다. 또한, 완전히 동일한 사용자 목록을 사용자 추가 양식에 붙여넣으려고 하면 Discourse가 오류를 반환하는 것 같습니다. 하지만 이 오류는 무시할 수 있습니다.

제가 이 방법으로 테스트해 본 쿼리는 다음과 같습니다. 쿼리를 실행하기 전에 그룹 이름(예: ‘year_2’)을 제공해야 합니다.

--[params]
-- string :group_name

SELECT u.username
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
JOIN users u ON u.id = gu.user_id
WHERE g.name = :group_name
AND u.trust_level = 3

API를 통해 Data Explorer 쿼리를 실행하고, API 요청의 결과를 사용하여 그룹을 업데이트함으로써 위의 과정을 자동화할 수도 있습니다. 이에 대한 자세한 내용은 여기에서 확인할 수 있습니다: Run Data Explorer queries with the Discourse API. 그런 다음 API를 통해 그룹 구성원을 업데이트해야 합니다.

Data Explorer 쿼리의 결과에 대해 일부 유형의 작업을 직접 수행할 수 있다면 흥미로울 것입니다. 예를 들어, 사용자 이름 목록을 반환하는 쿼리의 경우, 복사/붙여넣기 단계를 거치지 않고 모든 사용자를 그룹에 추가할 수 있습니다.

감사합니다!
Data Explorer는 아직 사용해 본 적이 없지만, 탐색해 볼 일들의 목록에 올라 있습니다. 제가 하려는 일을 수행하는 데 그럴듯한 방법처럼 들리네요. 한번 살펴보겠습니다…
쿼리도 감사합니다.

안녕하세요 @CC_people,
이것이 도움이 될지 확신은 없지만, 혹시 몰라서 공유합니다:

다른 옵션으로는 조건이 충족될 때 사용자를 특수 그룹에 추가하는 사용자 지정 플러그인을 사용하는 것입니다.

여기서 결국 어떤 방식으로 처리했는지 보고드립니다. 다른 분들께 도움이 될 수 있기를 바랍니다. 간단히 말하면, Excel로 내보낸 후 Excel에서 ‘AND’ 조건에 해당하는 사용자를 판별하고, 해당 사용자를 일괄적으로 특정 그룹에 추가하는 방식입니다.

기술 지원 담당자에게 동일한 기능을 수행하는 맞춤형 플러그인을 조사해 달라고 요청했지만, 구현이 다소 까다로운 것으로 보아 당분간 Excel 방식을 유지하기로 했습니다.

상세 내용:

  1. 전체 사용자 데이터베이스를 내보냅니다.
  2. Excel에 가져옵니다. ISNUMBER와 SEARCH 함수를 사용하여 첫 번째 시트에 있는 특정 그룹의 사용자를 두 번째 시트로 추출합니다.
  3. ISNUMBER와 SEARCH를 다시 사용하여 두 번째 시트의 또 다른 특정 그룹의 사용자를 세 번째 시트로 추출합니다.
  4. 해당 사용자를 각각 적절한 그룹에 일괄 추가합니다.

더 깔끔한 방법으로 동일한 결과를 얻을 수 있을 것 같지만, 현재 시스템이 구축되어 있으므로 매번 내보낸 데이터를 붙여넣고 결과를 가져오기만 하면 되며, 중간에 따로 생각할 필요가 없습니다.

이 시스템은 tl3 ‘정규’ 사용자에게 추가 권한과 조기 접근 권한을 부여하는 데 사용되고 있으며, 사용 품질과 양을 모두 높이는 데 원하는 효과를 내고 있습니다. 다소 번거롭고 자동화가 부족하지만, 성공적인 결과라고 할 수 있습니다. ‘이 그룹 AND 저 그룹’ 기능이 작동하고 있습니다.

새 자동화 스크립트 'User Group Membership through Badge’를 사용하여 이 기능을 연결해 볼 수 있습니다. 특히 Custom Triggered 배지가 활성화되어 있다면 더욱 유용할 것입니다.