fix(sql): fix sql script
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# IAM Service — Scalar 调用顺序指南
|
||||
# IAM Service — Scalar 调用顺序指南(v0.1.0)
|
||||
|
||||
## Authentication(认证方式)
|
||||
|
||||
@@ -11,6 +11,11 @@
|
||||
- 保护接口默认从 Token claim 的 `tenant_id` 推导租户
|
||||
- 可选兼容 `X-Tenant-ID: <uuid>`,若同时提供 Header 与 Token,则必须一致,否则返回 403
|
||||
|
||||
访问令牌(JWT)除 `tenant_id/user_id/roles/permissions` 外,还包含:
|
||||
|
||||
- `apps`:租户已开通应用列表(如 `["cms","tms"]`)
|
||||
- `apps_version`:租户 enabled_apps 版本号(用于客户端判断是否需要刷新会话)
|
||||
|
||||
## 通用响应结构
|
||||
|
||||
成功响应:
|
||||
@@ -38,6 +43,22 @@
|
||||
|
||||
## Step-by-step(可复制流程)
|
||||
|
||||
### Step -1:数据库初始化 / 迁移(开发/测试/生产)
|
||||
|
||||
本服务新增了“租户已开通应用(enabled_apps)”与“平台超级管理员(SuperAdmin)”能力,对应数据库新增表:
|
||||
|
||||
- `apps`
|
||||
- `tenant_entitlements`
|
||||
- `tenant_enabled_apps_history`
|
||||
|
||||
推荐使用版本化迁移脚本初始化与升级:
|
||||
|
||||
- 执行迁移:`scripts/db/migrate.sh`
|
||||
- 执行校验:`scripts/db/verify.sh`
|
||||
- 回滚(按版本):`scripts/db/rollback.sh`
|
||||
|
||||
本仓库同时保留开发用的一键重建脚本:`scripts/db/rebuild_iam_db.sh`(会清库重建,不适合生产)。
|
||||
|
||||
### Step 0:创建租户(可选)
|
||||
|
||||
**POST** `/tenants/register`
|
||||
@@ -57,6 +78,23 @@
|
||||
|
||||
下一步依赖:`tenant_id`(用于注册/登录时的 `X-Tenant-ID`)。
|
||||
|
||||
### Step 0.1:平台超级管理员(可选,但推荐先完成)
|
||||
|
||||
数据库已内置平台租户(Platform tenant):
|
||||
|
||||
- `tenant_id = 00000000-0000-0000-0000-000000000001`
|
||||
|
||||
在平台租户下注册首个用户,将自动获得平台级权限(用于管理各租户 enabled_apps):
|
||||
|
||||
**POST** `/auth/register`
|
||||
|
||||
- Header:`X-Tenant-ID: 00000000-0000-0000-0000-000000000001`
|
||||
- Body:
|
||||
|
||||
```json
|
||||
{ "email": "superadmin@example.com", "password": "securePassword123" }
|
||||
```
|
||||
|
||||
### Step 1:注册用户
|
||||
|
||||
**POST** `/auth/register`
|
||||
@@ -120,6 +158,34 @@
|
||||
|
||||
下一步依赖:确认具备目标权限(例如 `user:read` / `role:read`)。
|
||||
|
||||
### Step 4.1:平台层设置租户已开通应用(SuperAdmin)
|
||||
|
||||
该能力仅允许拥有平台级权限的用户调用:
|
||||
|
||||
- `iam:tenant:enabled_apps:read`
|
||||
- `iam:tenant:enabled_apps:write`
|
||||
|
||||
#### 4.1.1 查询某租户 enabled_apps
|
||||
|
||||
**GET** `/platform/tenants/{tenant_id}/enabled-apps`
|
||||
|
||||
- Header:`Authorization: Bearer <access_token>`(平台租户下登录得到的 token)
|
||||
|
||||
#### 4.1.2 设置某租户 enabled_apps(全量覆盖,幂等)
|
||||
|
||||
**PUT** `/platform/tenants/{tenant_id}/enabled-apps`
|
||||
|
||||
- Header:`Authorization: Bearer <access_token>`
|
||||
- Body:
|
||||
|
||||
```json
|
||||
{ "enabled_apps": ["cms", "tms"], "expected_version": 0 }
|
||||
```
|
||||
|
||||
说明:
|
||||
- `expected_version` 可选,用于并发控制;不匹配会返回 409。
|
||||
- 登录签发 token 时会自动把 `apps/apps_version` 注入到 JWT,并对 `permissions` 按 enabled_apps 过滤。
|
||||
|
||||
### Step 5:列出用户(User)
|
||||
|
||||
**GET** `/users?page=1&page_size=20`
|
||||
@@ -147,9 +213,32 @@
|
||||
{ "code": 0, "message": "Success", "data": [{ "id": "<role_id>", "name": "Admin", "description": "..." }], "trace_id": null }
|
||||
```
|
||||
|
||||
### Step 7:用户-角色绑定(User)
|
||||
|
||||
用户注册后默认无角色;通常由具备 `user:write` 的管理员进行角色分配。
|
||||
|
||||
#### 7.1 查询用户角色列表(需要 user:read)
|
||||
|
||||
**GET** `/users/{id}/roles`
|
||||
|
||||
- Header:`Authorization: Bearer <access_token>`
|
||||
|
||||
#### 7.2 设置用户角色(全量覆盖,幂等;需要 user:write)
|
||||
|
||||
**PUT** `/users/{id}/roles`
|
||||
|
||||
- Header:`Authorization: Bearer <access_token>`
|
||||
- Body:
|
||||
|
||||
```json
|
||||
{ "role_ids": ["<role_id_1>", "<role_id_2>"] }
|
||||
```
|
||||
|
||||
说明:
|
||||
- `role_ids` 必须全部属于当前租户,否则返回 400。
|
||||
|
||||
## 限流说明(Auth)
|
||||
|
||||
- `/auth/login`:约 2 req/s,burst 10(同一 IP)
|
||||
- `/auth/register`:约 1 req/s,burst 5(同一 IP)
|
||||
- 触发后返回:HTTP 429 + `code=40000`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user