侧边栏壁纸
博主头像
可乐呢o3o博主等级

少些比较,多些谦虚。

  • 累计撰写 56 篇文章
  • 累计创建 69 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Stack Auth 自部署管理员权限配置指南

Evan
2026-01-21 / 0 评论 / 0 点赞 / 5 阅读 / 6144 字

Stack Auth 自部署管理员权限配置指南

问题描述

成功自部署 Stack Auth 并创建了项目后,发现自己只能管理自己创建的项目,无法看到用户管理功能或访问系统管理员界面。
这是因为账号没有被添加到 internal 项目作为管理员。

解决方案概述

要获得完整的 Stack Auth 管理员权限,需要在数据库中进行以下配置:

  1. 设置正确的 serverMetadata - 包含 managedProjectIds: ["internal"]
  2. 设置正确的 projectId - 值为 internal
  3. 加入 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 - 应该设置为 internal
  • serverMetadata - 应该包含管理员权限配置

第四步:更新项目关联

如果 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

然后:

  1. 清除浏览器缓存和 Cookie
  2. 重新登录 Stack Auth 仪表板
  3. 验证管理员功能是否可用

完整示例

以下是一个完整的示例(请替换实际的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 表为空,说明还没有成功注册用户,需要:

  1. 访问 Stack Auth 仪表板注册账号
  2. 确保 STACK_SEED_INTERNAL_PROJECT_SIGN_UP_ENABLED=true

4. 服务启动失败

# 查看服务日志
docker-compose logs stack-auth

# 检查环境变量配置
docker-compose config

重要提醒

  1. 备份数据:在修改数据库前建议备份
  2. 记录ID:保存好各种ID值以便后续使用
  3. 验证配置:每步操作后都验证结果
  4. 服务重启:配置更改后必须重启服务
  5. 缓存清除:浏览器缓存可能导致权限不生效

相关命令快速参考

# 数据库操作
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 的完整管理员权限。

0

评论区