feat: add admin session rbac foundation
This commit is contained in:
@@ -44,6 +44,7 @@ MiniAPP 前台开发:
|
||||
| `api-response-contract.md` | 三端统一 JSON 响应包裹、错误和客户端解包规则 | 全部 |
|
||||
| `integration-workflow.md` | 三端本地启动、联调顺序、接口变更流程和验证命令 | 全部 |
|
||||
| `development-status.md` | 三端能力对接状态矩阵和优先联调路径 | 全部 |
|
||||
| `admin-business-function-matrix.md` | Admin A+B 重构业务覆盖、隐藏接口和删除闸门矩阵 | 全部 |
|
||||
| `decisions.md` | 当前有效技术和文档决策 | 全部 |
|
||||
| `backend-api-service.md` | 后端 API 服务运行与前端联调说明 | 后端 |
|
||||
| `backend-plan.md` | 当前 FastAPI 后端定位、业务模块、近期优先级和安全部署原则 | 后端 |
|
||||
|
||||
@@ -27,7 +27,14 @@
|
||||
| 方法 | 路径 | 用途 |
|
||||
| -------- | ----------------------------------------- | -------------------- |
|
||||
| `POST` | `/api/admin/auth/login` | 后台登录 |
|
||||
| `POST` | `/api/admin/auth/refresh` | 使用 HttpOnly Cookie 刷新后台访问令牌 |
|
||||
| `POST` | `/api/admin/auth/logout` | 撤销当前后台会话 |
|
||||
| `GET` | `/api/admin/me` | 当前后台用户 |
|
||||
| `GET` | `/api/admin/system/profile` | 当前用户、角色、权限码和动态菜单 |
|
||||
| `GET/POST/PATCH` | `/api/admin/system/users` | 管理后台用户 |
|
||||
| `GET/POST/PATCH` | `/api/admin/system/roles` | 管理角色和数据范围 |
|
||||
| `GET/POST/PATCH` | `/api/admin/system/menus` | 管理目录、页面和按钮 |
|
||||
| `GET/POST/PATCH` | `/api/admin/system/depts` | 管理部门 |
|
||||
| `GET` | `/api/admin/dashboard` | 工作台统计和最近线索 |
|
||||
| `GET` | `/api/admin/site-config` | 获取全部站点配置 |
|
||||
| `POST` | `/api/admin/site-config/{module}` | 新增模块项 |
|
||||
@@ -88,7 +95,15 @@ type SiteModule =
|
||||
{ "email": "admin@example.test", "password": "<password>" }
|
||||
```
|
||||
|
||||
成功响应包裹为 `data: { token, user: { id, email, name, role } }`;具体字段结构保持现有登录接口约定。
|
||||
成功响应包裹为 `data: { token, accessToken, expiresIn, user: { id, email, name, role } }`。`token` 保留给过渡期 React 管理端,`accessToken` 为短时访问令牌;Refresh Token 只通过同域 HttpOnly Cookie 返回,不进入 JSON。
|
||||
|
||||
管理员登录、刷新和退出依赖 Redis 会话存储。Refresh Token 轮换后旧令牌立即失效;Redis 不可用时认证接口返回 `503`,不降级为无会话校验。
|
||||
|
||||
`/api/admin/system/profile` 返回 `roles`、`permissions`、`menus`、`dataScopes` 和 `deptIds`。菜单只返回启用且可见的目录/页面,按钮菜单保留在页面节点的 `children` 中;前端组件只能从预注册组件白名单加载 `component`。
|
||||
|
||||
角色数据范围使用以下五个编码:`all`(全部)、`dept`(当前部门)、`dept_and_children`(当前部门及子部门)、`custom_dept`(自定义部门)、`self`(本人)。运营资源通过 `deptId` 和 `createdById` 归属字段执行查询过滤;资源归属迁移完成前不得在生产环境切换非管理员角色。
|
||||
|
||||
登录按 IP 与账号组合执行 Redis 限流,默认 60 秒最多 5 次;权限菜单缓存默认 300 秒。Redis 故障不能放行权限检查,缓存不可用时只能重新读取数据库,认证会话和限流不可用时返回 `503`。
|
||||
|
||||
## 兼容边界
|
||||
|
||||
|
||||
39
docs/admin-business-function-matrix.md
Normal file
39
docs/admin-business-function-matrix.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# WonderQ Admin 业务功能矩阵
|
||||
|
||||
本文档是 A+B 并行重构的第一阶段基线。矩阵以当前后端路由、契约文档、React 页面和 MiniAPP 公共接口为准;“已接入”只表示代码已具备,不代表已经完成人工验收。
|
||||
|
||||
## 端与路径
|
||||
|
||||
| 端 | 目录 | 当前路径 | 迁移策略 |
|
||||
| --- | --- | --- | --- |
|
||||
| 后端 | `WonderQ-Admin` | `/api` | 保持 Docker Compose、PostgreSQL、Redis、JWT 和 `{code,msg,data}` 契约 |
|
||||
| Vue 管理端 | `WonderQ-Admin-UI-Vue` | 本地 `/admin/`,生产 `/admin` | 新权限壳和业务切片逐项迁移 |
|
||||
| React 管理端 | `WonderQ-Admin-UI` | 本地 `5602`,生产 `/admin-legacy` | 过渡运行,已接入 Refresh Token 自动刷新 |
|
||||
| 前台 | `WonderQ-MiniAPP` | H5/微信小程序 | 不整体重写,只验证 Public API 兼容 |
|
||||
|
||||
## 业务覆盖矩阵
|
||||
|
||||
| 业务切片 | 后端接口/数据 | React 过渡端 | Vue 迁移端 | MiniAPP 依赖 | 当前验收状态 |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 登录、刷新、退出 | `/api/admin/auth/login`、`refresh`、`logout`、`/api/admin/me` | 兼容旧 `token/user` 字段,401 自动刷新 | 登录页、内存 Access Token、HttpOnly Refresh Cookie | 无 | 自动化通过,待浏览器人工验收 |
|
||||
| 仪表盘 | `/api/admin/dashboard` | 已有 | `DashboardPage` 已接入 | 无 | 读流程已接入 |
|
||||
| 首页与站点配置 | `/api/admin/site-config` 及模块 CRUD、排序 | 已有 | `HomePage` 已读取全量配置;编辑/排序待迁移 | `/api/public/home`、`/api/public/site-config` | 读契约保持,编辑待验收 |
|
||||
| 玩法分类与路线 | `/api/admin/wanfa/categories` 及分类/路线 CRUD | 已有 | `WanfaPage` 已读取分类和路线;写操作待迁移 | `/api/public/wanfa/categories` | 读流程已接入,写流程待迁移 |
|
||||
| 路线详情 | `/api/admin/details` 及详情 CRUD | React 现有玩法流程依赖 | Vue API 类型和页面待补齐 | `/api/public/details/{key}` | 待迁移 |
|
||||
| 管家 | `/api/admin/concierge/advisors` 及 CRUD | 已有 | `ConciergePage` 已读取顾问;写操作待迁移 | `/api/public/concierge/advisors`、详情顾问信息 | 读流程已接入,写流程待迁移 |
|
||||
| 需求线索 | `/api/admin/leads`、状态更新 | 已有筛选和状态流转 | `LeadsPage` 已读取;状态更新/筛选待迁移 | `/api/public/leads` | 读流程已接入,写流程待迁移 |
|
||||
| 媒体 | `/api/admin/media-assets`、上传 | React 已有上传 | Vue 页面和上传流程待迁移 | 通过站点配置间接依赖 | 待迁移 |
|
||||
| 发布、重置 | `/api/admin/publish`、`reset-guizhou-content` | React 现有入口/能力 | Vue 按权限增加二次确认后迁移 | 发布结果影响 Public API | 待迁移,执行前需要人工确认 |
|
||||
| RBAC 用户 | `/api/admin/system/users` | 旧角色字段继续兼容 | 系统资源入口已接入读取 | 无 | 后端/读页面已接入,编辑待迁移 |
|
||||
| RBAC 角色、菜单、部门 | `/api/admin/system/roles`、`menus`、`depts` | 旧端不删除 | Vue 动态菜单、组件白名单和系统资源读取已接入 | 无 | 后端/读页面已接入,完整按钮授权待验收 |
|
||||
|
||||
## 隐藏和横向能力清单
|
||||
|
||||
- Admin API 还包括模块新增、更新、删除、排序,以及详情、玩法、管家、首页内容的审计日志。
|
||||
- 迁移不能只检查可见菜单;`media-assets`、`publish`、`reset-guizhou-content`、仪表盘统计和所有排序接口必须在验收记录中逐项确认。
|
||||
- Public API 的首页、玩法、详情、管家、线索和用车需求依赖继续由 MiniAPP 访问;Admin API 不向 MiniAPP 暴露。
|
||||
- 新 RBAC 迁移为 `0025_admin_rbac`,资源归属迁移为 `0026_admin_ownership`。两者只提交迁移文件,不在本阶段自动升级数据库。
|
||||
|
||||
## 删除 React 的闸门
|
||||
|
||||
只有当矩阵中 Vue 列全部变为“已接入并人工验收”,并且登录刷新、权限、数据范围、Redis 故障、Public API 回归和 Docker 验证记录齐全后,才可以征求确认切换 `/admin` 与删除 `/admin-legacy`。
|
||||
@@ -7,7 +7,8 @@
|
||||
| 端 | 目录 | 职责 | 主要契约 |
|
||||
| ------------ | ------------------ | ----------------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| 后端 API | `WonderQ-Admin` | 提供 Public API、Admin API、鉴权、数据库、迁移和 seed | `backend-api-service.md`、`backend-plan.md`、`public-api.md`、`admin-api-requirements.md` |
|
||||
| 管理前端 | `WonderQ-Admin-UI` | 维护首页结构、目的地、线索和页面模块配置 | `admin-api-requirements.md`、`module-config-api.md` |
|
||||
| 管理前端(Vue 迁移端) | `WonderQ-Admin-UI-Vue` | 新权限壳、动态菜单和业务切片迁移,生产路径 `/admin` | `admin-api-requirements.md`、`module-config-api.md` |
|
||||
| 管理前端(React 过渡端) | `WonderQ-Admin-UI` | 旧管理端,过渡路径 `/admin-legacy` | `admin-api-requirements.md`、`module-config-api.md` |
|
||||
| 前台 MiniAPP | `WonderQ-MiniAPP` | H5 与微信小程序前台展示、咨询和线索提交 | `public-api.md` |
|
||||
|
||||
三端所有 JSON 接口还必须遵守 [api-response-contract.md](./api-response-contract.md):成功业务数据位于 `data`,失败为 `data: null`,`code` 必须等于 HTTP 状态码。
|
||||
@@ -45,6 +46,16 @@ yarn dev
|
||||
http://localhost:5602
|
||||
```
|
||||
|
||||
Vue 迁移端独立启动:
|
||||
|
||||
```powershell
|
||||
Set-Location .\WonderQ-Admin-UI-Vue
|
||||
yarn install
|
||||
yarn dev
|
||||
```
|
||||
|
||||
默认访问 `http://localhost:5604/admin/`。生产反向代理使用 `/admin`,旧 React 使用 `/admin-legacy`;两端共用 `/api` 和 HttpOnly Refresh Cookie。
|
||||
|
||||
管理端优先通过 `VITE_API_BASE_URL` 或本地 Vite `/api` 代理访问 `http://localhost:4000`。
|
||||
|
||||
3. 启动 MiniAPP H5。
|
||||
|
||||
Reference in New Issue
Block a user