# 平台超级管理员与双域鉴权开发文档

## 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 访问租户域接口被拒绝。
