实现登录权限底座

This commit is contained in:
andy
2026-07-09 19:31:20 +08:00
parent a5a251a3f3
commit 666fb41328
77 changed files with 3946 additions and 19 deletions

View File

@@ -18,6 +18,7 @@
- Reservation OPERA 模拟骨架已确认任务固定生成两条模拟操作支持执行、失败重试、attempt 记录和任务审计列表。
- SuperAgent 查询上下文接口 1、2支持 HMAC 鉴权的订单上下文查询和对象详情查询。
- Debug EML 上传到 SuperAgent 调试链路:受控上传 `.eml`、转存阿里云 OSS、写入 SourceMessage Inbox、调用 SuperAgent Open API 并返回调试结果。
- 登录权限底座:支持用户名密码登录、登出、当前用户上下文、数据库 session token、可访问酒店、权限码和可见菜单。
当前不要把以下能力当作已上线:
@@ -26,9 +27,10 @@
- 自动 ACK、`task.result` 或客户回复。
- 业务前端页面展示邮件原文。
- OHIP / OPERA 或其他业务系统真实写操作。
- SuperAgent 查询上下文接口 3、4。
- 普通任务切换订单接口。
- 用户身份、权限和真实审计 actor
- 用户、角色、权限、菜单和酒店管理后台 CRUD
- 现有业务接口强制登录和强制权限拦截。
- 业务审计 actor 全量迁移到当前登录用户。
- Debug EML 上传链路不属于生产普通业务页面能力,生产默认关闭;未接入正式用户权限前不要开放给普通用户。
## 2. 上线前必须确认
@@ -55,7 +57,28 @@
| `TH_HOTEL_DB_PASSWORD` | 是 | 只能通过 Secret 注入,不写入仓库。 |
| `TH_HOTEL_DB_DRIVER` | 否 | MySQL 使用 `com.mysql.cj.jdbc.Driver`。 |
### 3.2 SourceMessage
### 3.2 登录权限
| 变量 | 是否 Secret | 上线注意事项 |
| --- | --- | --- |
| `AUTH_DEV_BOOTSTRAP_ADMIN_USERNAME` / `AUTH_TEST_BOOTSTRAP_ADMIN_USERNAME` / `AUTH_PROD_BOOTSTRAP_ADMIN_USERNAME` | 否 | 初始超级管理员用户名;系统已有超级管理员后不会覆盖。 |
| `AUTH_DEV_BOOTSTRAP_ADMIN_PASSWORD` / `AUTH_TEST_BOOTSTRAP_ADMIN_PASSWORD` / `AUTH_PROD_BOOTSTRAP_ADMIN_PASSWORD` | 是 | 初始超级管理员密码,只能通过 Secret 注入;系统已有超级管理员后不会覆盖。 |
| `AUTH_DEV_BOOTSTRAP_ADMIN_DISPLAY_NAME` / `AUTH_TEST_BOOTSTRAP_ADMIN_DISPLAY_NAME` / `AUTH_PROD_BOOTSTRAP_ADMIN_DISPLAY_NAME` | 否 | 初始超级管理员展示名。 |
| `AUTH_DEV_BOOTSTRAP_DEFAULT_HOTEL_ID` / `AUTH_TEST_BOOTSTRAP_DEFAULT_HOTEL_ID` / `AUTH_PROD_BOOTSTRAP_DEFAULT_HOTEL_ID` | 否 | 登录权限底座初始化默认酒店prod 必须配置真实酒店 ID。 |
| `AUTH_DEV_BOOTSTRAP_DEFAULT_HOTEL_NAME` / `AUTH_TEST_BOOTSTRAP_DEFAULT_HOTEL_NAME` / `AUTH_PROD_BOOTSTRAP_DEFAULT_HOTEL_NAME` | 否 | 默认酒店展示名称。 |
| `AUTH_DEV_BOOTSTRAP_DEFAULT_HOTEL_TIME_ZONE` / `AUTH_TEST_BOOTSTRAP_DEFAULT_HOTEL_TIME_ZONE` / `AUTH_PROD_BOOTSTRAP_DEFAULT_HOTEL_TIME_ZONE` | 否 | 默认酒店本地时区,默认 `Asia/Bangkok`。 |
| `AUTH_DEV_SESSION_TTL_MINUTES` / `AUTH_TEST_SESSION_TTL_MINUTES` / `AUTH_PROD_SESSION_TTL_MINUTES` | 否 | 数据库 session token 有效分钟数,默认 `720`。 |
| `AUTH_BOOTSTRAP_ADMIN_USERNAME` / `AUTH_BOOTSTRAP_ADMIN_PASSWORD` / `AUTH_SESSION_TTL_MINUTES` 等通用变量 | 视具体变量而定 | 兼容兜底变量;新环境优先使用环境专属变量。 |
注意:
- 数据库只保存 `token_hash`,不保存明文 `access_token`
- `access_token` 只在登录成功响应中返回一次;前端只能放 `sessionStorage`,不能放 `localStorage`、URL、日志或错误上报。
- 当前第一版只做可选 Bearer token 解析,现有 Reservation / SourceMessage 业务接口仍不强制登录。
- `/api/auth/me``/api/auth/logout` 需要 `Authorization: Bearer <access_token>`
- 管理后台还未上线时,不要把数据库手工改用户、角色、权限作为常规运营手段。
### 3.3 SourceMessage
| 变量 | 是否 Secret | 上线注意事项 |
| --- | --- | --- |
@@ -69,7 +92,7 @@
- 原文读取 key 不是用户体系,后续接入正式登录和角色权限后应替换。
- 任何能读取原文的调用都必须有调用方和访问场景,并写入审计表。
### 3.3 AgentBus
### 3.4 AgentBus
| 变量 | 是否 Secret | 上线注意事项 |
| --- | --- | --- |
@@ -88,7 +111,7 @@
- `AGENTBUS_CAPTURE_ENABLED=false` 时,业务 frame 会被忽略,不会写入 SourceMessage Inbox。
- 当前实现不发送 ACK、不发送 `task.result`、不自动回复客户。
### 3.4 SuperAgent HMAC
### 3.5 SuperAgent HMAC
| 变量 | 是否 Secret | 上线注意事项 |
| --- | --- | --- |
@@ -108,7 +131,7 @@
- 任务结果通知接口里的 `source_message_id` 是外部来源消息 ID对应 AgentBus `source.external_message_id`;正式请求必须带 `hotel_id`,后端用 `hotel_id + provider + channel + external_message_id` 反查内部 SourceMessage Inbox。
- SuperAgent 查询上下文接口中的 `source_message_id``source_event_index` 第一版仅兼容接收,不参与查询和校验;不要依赖它们限制查询范围。
### 3.5 Debug EML / SuperAgent Open API / 阿里云 OSS
### 3.6 Debug EML / SuperAgent Open API / 阿里云 OSS
| 变量 | 是否 Secret | 上线注意事项 |
| --- | --- | --- |
@@ -160,6 +183,14 @@
- `server/src/main/resources/db/migration/V7__create_debug_eml_superagent_run.sql`
当前 SourceMessage duplicate 诊断相关 migration
- `server/src/main/resources/db/migration/V8__create_source_message_payload_duplicate.sql`
当前 M003 登录权限相关 migration
- `server/src/main/resources/db/migration/V9__create_identity_access_hotel_menu.sql`
上线前确认:
- 目标数据库为空库或 Flyway history 与当前代码一致。