신뢰 수준 효과가 있는 그룹에서 사용자를 제거하면 자동 그룹 멤버십이 재계산되지 않습니다

해당 주제와 함께, 다음 내용을 읽었습니다. Group trust level

그리고 이 오래된 주제도 함께 참고했습니다. Should losing group membership unlock trust level?

여기서 설명된 상황은 제 경험과 거의 일치합니다.

하지만, 제 자체 테스트용 Discourse 인스턴스에서 발견한 내용은 다음과 같습니다…

모든 Trust Level 설정이 기본값인 상태에서, TL1 계정(U)과 Trust_Level_3을 부여하는 tl3이라는 이름의 그룹이 있습니다.

  1. 초기 조건
    • Trust Level: 1: basic user Unlocked
    • Automatic Groups: trust_level_0, trust_level_1
    • Custom Groups: 없음
  2. U를 tl3에 추가
    • Trust Level: 3: Regular Unlocked
    • Automatic Groups: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • Custom Groups: tl3
  3. U를 tl3에서 제거
    • Trust Level: 2: Member Unlocked
    • Automatic Groups: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • Custom Groups: 없음
    • 참고: 신뢰 수준이 2임에도 불구하고, 사용자는 여전히 자동 그룹 trust_level_3에 속해 있습니다. 신뢰 수준이 잠기지 않으면 사용자가 TL1로 강등될 수 없다는 점을 고려할 때, 여기서는 사용자가 즉시 trust_level_2 자동 그룹의 멤버십을 잃어야 하는 것이 예상되는 결과입니다.
  4. U의 신뢰 수준 잠금
    • Trust Level: 2: Member Locked
    • Automatic Groups: trust_level_0, trust_level_1, trust_level_2, trust_level_3
    • Custom Groups: 없음
    • 참고: 신뢰 수준이 2: Member임에도 불구하고, 사용자는 여전히 자동 그룹 trust_level_3에 속해 있습니다.
  5. U의 신뢰 수준 잠금 해제
    • Trust Level: 1: Basic Unlocked
    • Automatic Groups: trust_level_0, trust_level_1
    • Custom Groups: 없음

즉, 사용자가 그룹에서 제외될 때 신뢰 수준은 자동으로 즉시 재계산되지만, 자동 그룹 멤버십은 사용자의 신뢰 수준에 잠금 해제(unlock) 이벤트가 발생하지 않는 한 재계산되지 않습니다.

제 가정에 따르면, 자동 그룹 멤버십은 시스템 전체의 모든 사용자를 대상으로 하루에 한 번 계산되며, 그 시점에 자동 그룹 멤버십이 수정될 것입니다. 하지만 느낌상 자동 그룹 멤버십은 신뢰 수준에 영향을 미치는 그룹에서 제거될 때 또는 신뢰 수준이 증가하는 경우뿐만 아니라 어떤 변경이든 발생할 때 즉시 트리거되어야 한다고 생각합니다.

따라서 백엔드 API 호출인

POST {{site}}/admin/users/{{userId}}/groups

은 자동 그룹 멤버십을 업데이트하지만,

DELETE {{site}}/admin/users/{{usedId}}/groups/{{groupId}}

은 그렇지 않으며, 특히 접근 제어를 위해 자동 신뢰 수준 그룹을 사용하고 있다면 이는 버그처럼 느껴집니다.

그리고, 완전성을 위해, 당연히

PUT {{site}}/admin/users/{{userId}}/trust_level

에 대한 호출은(관리자 인터페이스에서 사용자의 신뢰 수준을 수동으로 변경할 때 호출됨) 예상대로 즉시 자동 그룹 멤버십을 다시 계산합니다.

2개의 좋아요

네, 여기서 핵심 개발 경험은 자동 그룹에 대한 이러한 조작을 금지하고, 트랜지션 작업을 수행할 때 PUT {{site}}/admin/users/{{userId}}/trust_level 엔드포인트만 사용하도록 강제해야 한다는 점입니다. 사용자가 엔드포인트를 통해 사람을 수동적으로 그룹에 추가하거나 제거하려는 시도를 하면 422 상태 코드 등을 반환해야 합니다.

신뢰 수준 롤백은 항상 여기서 이루어져야 합니다:

이것이 잠금(lock)도 지원하기 때문에 이것이 중요합니다.

알겠습니다.

명확히 하고 싶은 점이 있습니다. 모든 API 관련 내용은 그룹 멤버십 UI를 통해 그룹 멤버십 작업을 수행할 때 XHR 스트림을 녹화한 것일 뿐입니다. 실제로 API 호출을 직접 수행하는 것이 아니라, UI를 사용할 때 발생하는 API 호출을 관찰한 것입니다.

따라서 제 생각은 다음과 같습니다. TL3 효과가 있는 그룹이 있을 때 이 버튼을 클릭하면,

해당 사용자가 Trust Level 3 요건을 충족하지 않거나 해당 신뢰 수준이 잠겨 있지 않은 경우, 즉시 trust_level_3 그룹에서 제거되어야 합니다.

여기서 상상하는 사용 사례는, 예를 들어 TL4 사용자 그룹을 TL3 효과가 있는 그룹의 소유자로 설정하여, 그들이 수동으로 사람들을 TL3로 승격할 수 있게 하는 것입니다.

승격 기능은 정상적으로 작동하지만, 동일한 사용자들이 누군가를 TL3 효과 그룹에서 제거할 때, 영향을 받는 사용자가 trust_level_3에서 즉시 제거되는 효과가 없습니다.

이것을 완전히 이해하는 것은 해당 기능의 공식적인 용도가 아닌 사용(off-label use)임을 잘 알고 있습니다.

그저 사용자의 신뢰 수준이 3에서 2로 변경되었음에도, 다음 재계산 이벤트가 발생할 때까지 trust_level_3 그룹에 남아 있는 것이 모순적으로 느껴질 뿐입니다.

2개의 좋아요