3.8 KiB
3.8 KiB
平台超级管理员与双域鉴权开发文档
1. 背景与目标
当前系统采用租户内 RBAC(用户 -> 角色 -> 权限),但“系统超级管理员”职责属于平台级,不应绑定任何租户。
本迭代目标是在不破坏现有租户业务能力的前提下,建立“平台域 + 租户域”的双域鉴权模型。
2. 设计原则
- 平台域与租户域严格隔离,避免越权访问。
- 平台账号不落入任何租户,不依赖
tenant_id。 - 租户业务接口只允许租户令牌访问。
- 平台管理接口只允许平台令牌访问。
- 兼容现有租户登录接口与权限模型,按迭代逐步替换。
3. 总体方案
3.1 身份域模型
TENANT:租户业务身份(必须携带tenantId)。PLATFORM:平台管理身份(不携带tenantId)。
3.2 Token 约定
- 租户令牌 claims:
uid、tid、scope=TENANT。 - 平台令牌 claims:
uid、scope=PLATFORM。
3.3 权限注解扩展
@RequirePermission 新增 domain 字段:
domain=TENANT(默认)domain=PLATFORM
3.4 平台 RBAC 数据模型
新增表:
platform_userplatform_roleplatform_permissionplatform_user_roleplatform_role_permission
4. 迭代拆分
Iteration 1(已启动)
目标:落地双域鉴权底座,打通平台登录和租户管理平台化访问。
- 增加鉴权域枚举:
AuthScope、PermissionDomain AuthContext增加scope上下文- JWT 支持租户/平台两类 token
- 新增平台登录接口:
POST /api/auth/platform-login - 拦截器按
scope + domain双维度鉴权 - 租户管理接口切换到平台域权限:
platform.tenant.manage - 增加平台 RBAC 初始化迁移:
V40__platform_admin_rbac.sql
Iteration 2(进行中)
目标:收敛租户默认兜底逻辑,修正平台日志归属。
- 清理所有
tenantId == null ? 1L : tenantId兜底逻辑 - 平台操作审计增加
scope字段(TENANT/PLATFORM)并完成查询分流 - 平台接口统一路由前缀(新增
/api/platform/tenants、/api/platform/audit-logs) - 为平台接口补齐权限码与元数据校验(
domain=PLATFORM)
Iteration 3(待开发)
目标:前后端联动与灰度上线。
- 前端增加登录入口切换(平台 / 租户)
- 平台工作台页面(已接入租户管理、平台审计日志基础页面)
- 平台菜单动态化(
platform_menu、platform_role_menu+/api/platform/menus/current) - 平台菜单管理页(新增/编辑/排序/菜单绑定角色)
- 平台 IAM 页面(平台用户管理、平台角色管理、平台权限查看)
- 双域登录回归测试与权限压测
- 发布灰度与回滚预案
5. 初始账号与权限
初始化数据(V40):
- 平台角色:
PLATFORM_SUPER_ADMIN - 平台权限:
platform.tenant.manage、platform.user.manage、platform.audit.read、platform.menu.manage、platform.role.read、platform.role.manage、platform.permission.read - 平台管理员账号:
- 手机号:
13900000000 - 密码:
123456
- 手机号:
上线前必须改密,并接入密码加密存储。
6. 风险与注意事项
- 已完成租户默认
1L兜底清理;后续仍需补齐平台独立审计模型,避免平台操作与租户审计混用。 tenant.manage与platform.tenant.manage属于不同域权限码,前后端配置需同步。- 建议后续引入统一
domain中间件拦截,禁止跨域访问。
7. 验收标准(Iteration 1)
- 平台管理员可通过
/api/auth/platform-login获取scope=PLATFORMtoken。 - 平台管理员可访问租户管理接口(
/api/tenants)。 - 租户 token 访问平台域接口被拒绝。
- 平台 token 访问租户域接口被拒绝。