我认为这是一个 bug,但欢迎将其重新分类到 #dev。
复现步骤
-
进入 管理 > 主题 > 通用 >
<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> -
模拟不同用户,查看获取到的群组。
-
进入数据浏览器(或直接操作数据库),运行以下查询:
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
数据库输出
- 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 个群组
数据库输出是正确的(我可以在界面中看到这些用户确实被分配了这些群组),因此问题似乎出在 API 端。是什么导致某些群组未被包含在 currentUser.groups 中?
