currentUser.groups가 group_users 테이블과 일치하지 않음

이것은 버그인 것 같습니다. 원하시면 Development 카테고리로 재분류해 주세요.

재현 방법

  1. Admin > Themes > Common > </head>로 이동하여 테마를 생성하고 아래 내용을 붙여넣습니다.

    <script type="text/discourse-plugin" version="0.8.42">
      const currentUser = api.getCurrentUser()
      const groupIds = currentUser.groups.map(x => x.id)
      console.log(`User id: ${currentUser.id} Group ids: ${groupIds} (${groupIds.length})`)
    </script>
    
  2. 다른 사용자로 위장(Impersonate)하여 어떤 그룹을 받게 되는지 확인합니다.

  3. Data Explorer(또는 DB)로 이동하여 아래 쿼리를 실행합니다.

    SELECT
        u.id,
        array_agg(group_id),
        count(group_id)
    FROM
        group_users gu
        LEFT JOIN users u ON u.id = gu.user_id
        LEFT JOIN GROUPS g ON g.id = gu.group_id
    WHERE
        user_id IN (2, 3, 6) -- 또는 위장한 사용자 ID
    GROUP BY
        u.id
    ORDER BY
        u.id
    

DB 출력

- 2	{1,3,10,11,12,13,14,50,63,64,68}	11

- 3	{2,3,10,11,12,13,14,53,54,59,61,75,77,79,88}	15 

- 6	{10,11,54,75,77,87}	6

API 출력

- User id: 2 Group ids: 1, 3, 10, 11, 12, 13, 14, 50, 63, 64, 68 (11)

- User id: 3 Group ids: 10, 53, 54, 59, 61, 75, 79, 88 (8) <= 7개 그룹 누락

- User id: 6 Group ids: 10, 54 (2) <= 4개 그룹 누락

DB 출력은 정확합니다(UI에서 해당 사용자에게 해당 그룹이 할당되어 있는 것을 확인할 수 있습니다). 따라서 API에 문제가 있는 것으로 보입니다. 어떤 원인으로 인해 일부 그룹이 currentUser.groups에 전송되지 않는 것일까요?

누락된 그룹들이 사용자들에게 숨겨지도록 설정되어 있을 가능성이 있나요? 그렇다면 클라이언트의 currentUser 객체에 포함되지 않습니다.

아, 좋은 지적이네요. 그러면 더 이상 버그가 아니군요. 감사합니다!