Stack Auth 自部署管理员权限配置指南
问题描述
成功自部署 Stack Auth 并创建了项目后,发现自己只能管理自己创建的项目,无法看到用户管理功能或访问系统管理员界面。
这是因为账号没有被添加到 internal 项目作为管理员。
解决方案概述
要获得完整的 Stack Auth 管理员权限,需要在数据库中进行以下配置:
- 设置正确的
serverMetadata- 包含managedProjectIds: ["internal"] - 设置正确的
projectId- 值为internal - 加入 Internal Team - 成为
internal项目团队的成员
详细步骤
第一步:连接数据库
# 进入数据库容器
docker-compose exec stack-auth-db psql -U postgres -d stackframe
第二步:查找用户信息
-- 查看邮箱和用户ID
SELECT * FROM "ContactChannel";
记录下:
projectUserId(用户ID)value(邮箱地址)tenancyId(租户ID)
第三步:检查当前状态
-- 使用用户ID查看当前配置
SELECT * FROM "ProjectUser" WHERE "projectUserId" = 'YOUR_USER_ID_HERE';
查看当前的:
projectId- 应该设置为internalserverMetadata- 应该包含管理员权限配置
第四步:更新项目关联
如果 projectId 不是 internal,需要更新:
-- 设置 projectId 为 internal
UPDATE "ProjectUser"
SET "projectId" = 'internal'
WHERE "projectUserId" = 'YOUR_USER_ID_HERE'
AND "tenancyId" = 'YOUR_TENANCY_ID_HERE';
第五步:设置管理员权限
-- 设置管理员权限的 serverMetadata
UPDATE "ProjectUser"
SET "serverMetadata" = '{"managedProjectIds": ["internal"]}'
WHERE "projectUserId" = 'YOUR_USER_ID_HERE'
AND "tenancyId" = 'YOUR_TENANCY_ID_HERE';
第六步:加入 Internal Team
查找 Internal Team 的ID:
-- 查找 internal 项目信息
SELECT * FROM "Project" WHERE id = 'internal';
记录下 ownerTeamId(通常类似 a23e1b7f-ab18-41fc-9ee6-7a9ca9fa543c)
检查是否已在 Internal Team 中:
-- 检查团队成员身份
SELECT * FROM "TeamMember" WHERE "projectUserId" = 'YOUR_USER_ID_HERE';
如果没有在 Internal Team 中,添加自己:
-- 将自己添加到 Internal Team
INSERT INTO "TeamMember" (
"projectUserId",
"teamId",
"tenancyId",
"createdAt",
"updatedAt"
) VALUES (
'YOUR_USER_ID_HERE',
'INTERNAL_TEAM_ID_HERE',
'YOUR_TENANCY_ID_HERE',
NOW(),
NOW()
);
第七步:验证配置
-- 验证配置
SELECT "projectUserId", "projectId", "serverMetadata"
FROM "ProjectUser"
WHERE "projectUserId" = 'YOUR_USER_ID_HERE';
-- 验证团队成员身份
SELECT * FROM "TeamMember" WHERE "projectUserId" = 'YOUR_USER_ID_HERE';
第八步:重启服务并清除缓存
# 退出数据库
exit
# 重启 Stack Auth 服务
docker-compose restart stack-auth
然后:
- 清除浏览器缓存和 Cookie
- 重新登录 Stack Auth 仪表板
- 验证管理员功能是否可用
完整示例
以下是一个完整的示例(请替换实际的ID值):
-- 示例:用户 [email protected] 的完整配置过程
-- 1. 查找用户信息
SELECT * FROM "ContactChannel" WHERE value = '[email protected]';
-- 结果:projectUserId = cce577c6-9b6e-4b11-a157-e59b02b995b4
-- tenancyId = 1452d6ee-5e7a-4a11-8298-7ea97ea9760c
-- 2. 更新 projectId
UPDATE "ProjectUser"
SET "projectId" = 'internal'
WHERE "projectUserId" = 'cce577c6-9b6e-4b11-a157-e59b02b995b4'
AND "tenancyId" = '1452d6ee-5e7a-4a11-8298-7ea97ea9760c';
-- 3. 设置管理员权限
UPDATE "ProjectUser"
SET "serverMetadata" = '{"managedProjectIds": ["internal"]}'
WHERE "projectUserId" = 'cce577c6-9b6e-4b11-a157-e59b02b995b4'
AND "tenancyId" = '1452d6ee-5e7a-4a11-8298-7ea97ea9760c';
-- 4. 查找 Internal Team ID
SELECT * FROM "Project" WHERE id = 'internal';
-- 结果:ownerTeamId = a23e1b7f-ab18-41fc-9ee6-7a9ca9fa543c
-- 5. 加入 Internal Team
INSERT INTO "TeamMember" (
"projectUserId",
"teamId",
"tenancyId",
"createdAt",
"updatedAt"
) VALUES (
'cce577c6-9b6e-4b11-a157-e59b02b995b4',
'a23e1b7f-ab18-41fc-9ee6-7a9ca9fa543c',
'1452d6ee-5e7a-4a11-8298-7ea97ea9760c',
NOW(),
NOW()
);
验证成功
配置完成后,重新登录 Stack Auth 仪表板,应该能看到:
- ✅ 用户管理功能
- ✅ 所有项目的管理权限
- ✅ Stack Dashboard 访问权限
- ✅ 系统级管理功能
故障排除
1. 权限设置后仍无效果
- 确保重启了 Stack Auth 服务
- 清除浏览器缓存和 Cookie
- 尝试无痕模式登录
2. 数据库连接失败
# 检查数据库容器状态
docker-compose ps
# 检查数据库连接
docker-compose logs stack-auth-db
3. 找不到用户信息
如果 ContactChannel 表为空,说明还没有成功注册用户,需要:
- 访问 Stack Auth 仪表板注册账号
- 确保
STACK_SEED_INTERNAL_PROJECT_SIGN_UP_ENABLED=true
4. 服务启动失败
# 查看服务日志
docker-compose logs stack-auth
# 检查环境变量配置
docker-compose config
重要提醒
- 备份数据:在修改数据库前建议备份
- 记录ID:保存好各种ID值以便后续使用
- 验证配置:每步操作后都验证结果
- 服务重启:配置更改后必须重启服务
- 缓存清除:浏览器缓存可能导致权限不生效
相关命令快速参考
# 数据库操作
docker-compose exec stack-auth-db psql -U postgres -d stackframe
# 服务管理
docker-compose restart stack-auth
docker-compose logs stack-auth
docker-compose ps
# 常用查询
SELECT * FROM "ContactChannel"; # 查看用户邮箱
SELECT * FROM "Project"; # 查看所有项目
SELECT * FROM "ProjectUser"; # 查看用户项目关联
SELECT * FROM "TeamMember"; # 查看团队成员
成功获得 Stack Auth 的完整管理员权限。
评论区