writeOff/docs/平台超级管理员双域鉴权开发文档.md
haomingming 815aa04fe8 first
2026-05-20 18:21:39 +08:00

104 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 平台超级管理员与双域鉴权开发文档
## 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_user`
- `platform_role`
- `platform_permission`
- `platform_user_role`
- `platform_role_permission`
## 4. 迭代拆分
### Iteration 1已启动
目标:落地双域鉴权底座,打通平台登录和租户管理平台化访问。
- [x] 增加鉴权域枚举:`AuthScope``PermissionDomain`
- [x] `AuthContext` 增加 `scope` 上下文
- [x] JWT 支持租户/平台两类 token
- [x] 新增平台登录接口:`POST /api/auth/platform-login`
- [x] 拦截器按 `scope + domain` 双维度鉴权
- [x] 租户管理接口切换到平台域权限:`platform.tenant.manage`
- [x] 增加平台 RBAC 初始化迁移:`V40__platform_admin_rbac.sql`
### Iteration 2进行中
目标:收敛租户默认兜底逻辑,修正平台日志归属。
- [x] 清理所有 `tenantId == null ? 1L : tenantId` 兜底逻辑
- [x] 平台操作审计增加 `scope` 字段(`TENANT/PLATFORM`)并完成查询分流
- [x] 平台接口统一路由前缀(新增 `/api/platform/tenants``/api/platform/audit-logs`
- [x] 为平台接口补齐权限码与元数据校验(`domain=PLATFORM`
### Iteration 3待开发
目标:前后端联动与灰度上线。
- [x] 前端增加登录入口切换(平台 / 租户)
- [x] 平台工作台页面(已接入租户管理、平台审计日志基础页面)
- [x] 平台菜单动态化(`platform_menu``platform_role_menu` + `/api/platform/menus/current`
- [x] 平台菜单管理页(新增/编辑/排序/菜单绑定角色)
- [x] 平台 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=PLATFORM` token。
- 平台管理员可访问租户管理接口(`/api/tenants`)。
- 租户 token 访问平台域接口被拒绝。
- 平台 token 访问租户域接口被拒绝。