chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。
按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。
涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
DDL 基线合并 / Kiro 到 Claude Code 迁移
阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
75
docs/audit/changes/2026-03-23__role-routing-page-guard.md
Normal file
75
docs/audit/changes/2026-03-23__role-routing-page-guard.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# 变更审计记录(Change Audit Record)
|
||||
|
||||
- 日期/时间:2026-03-23 08:00:00
|
||||
- Prompt-ID:P20260323-role-routing
|
||||
- 原始原因:用户要求按角色区分登录后跳转页面、tab-bar 可见性、全页面权限守卫,新增 head_coach(教练)和 manager(管理员)两个角色
|
||||
- 直接原因:小程序原有逻辑所有用户统一跳转同一页面,无角色区分;页面无权限守卫,手动输入路径可绕过
|
||||
|
||||
## 变更范围(Changed)
|
||||
|
||||
- 数据库:`auth.roles` 新增 head_coach、manager 两条角色记录及对应 `auth.role_permissions` 映射
|
||||
- 后端 API:`/api/xcx/me`、`/api/xcx/login`、`/api/xcx/dev-login` 返回 `role` 字段
|
||||
- 后端 Schema:`WxLoginResponse`、`UserStatusResponse` 增加 `role` 字段
|
||||
- 小程序全局:`app.ts` checkAuthStatus 按状态路由,disabled 强制登出
|
||||
- 小程序权限守卫:新建 `utils/auth-guard.ts`,包含角色→tab 映射、角色→首页映射、页面→角色权限矩阵、checkPageAccess 函数
|
||||
- 小程序 tab-bar:从 `globalData.visibleTabs` 动态读取可见 tab
|
||||
- 小程序登录页:登录成功后保存 role、syncVisibleTabs、按角色跳转
|
||||
- 小程序 15 个业务页面:onShow 添加 checkPageAccess 守卫
|
||||
- 小程序 3 个状态页(apply/reviewing/no-permission):approved 跳转改为 getRoleHome(role)
|
||||
- 全局类型:`authUser` 增加 `role`,`globalData` 增加 `visibleTabs`
|
||||
- BD 手册:更新 `BD_Manual_auth_tables.md` 角色从 4 条到 6 条
|
||||
|
||||
## 风险与回滚(Risk & Rollback)
|
||||
|
||||
- 风险点:
|
||||
- checkPageAccess 每次 onShow 都请求 `/api/xcx/me`,高频页面切换可能增加后端压力(后续可加缓存/节流)
|
||||
- 角色为空时 tab 只显示"我的",新用户首次登录如果后端未返回 role 会只看到我的页
|
||||
- 迁移脚本依赖 `auth.roles` 和 `auth.permissions` 表已存在
|
||||
- 回滚要点:
|
||||
- 数据库:执行 `DELETE FROM auth.role_permissions WHERE role_id IN (SELECT id FROM auth.roles WHERE code IN ('head_coach','manager')); DELETE FROM auth.roles WHERE code IN ('head_coach','manager');`
|
||||
- 后端:移除 schema 中 role 字段、路由中角色查询逻辑
|
||||
- 小程序:移除 auth-guard.ts、各页面 checkPageAccess 调用、恢复 app.ts/login.ts/apply.ts/reviewing.ts/no-permission.ts 原有跳转逻辑
|
||||
|
||||
## 验证(Verification)
|
||||
|
||||
1. 数据库验证:`SELECT code, name FROM auth.roles ORDER BY id;` 应返回 6 条(coach, staff, head_coach, manager, site_admin, tenant_admin)
|
||||
2. 后端验证:调用 `GET /api/xcx/me`,approved 用户响应应包含 `role` 字段
|
||||
3. 小程序验证:
|
||||
- coach 角色登录 → 跳转任务页,tab 只显示"任务+我的"
|
||||
- staff 角色登录 → 跳转看板页,tab 只显示"看板+我的"
|
||||
- head_coach/manager 角色登录 → 跳转看板页,tab 显示"任务+看板+我的"
|
||||
- coach 手动访问看板页 → 被守卫拦截跳回任务页
|
||||
- staff 手动访问任务页 → 被守卫拦截跳回看板页
|
||||
- 账号被禁用 → 任何页面 onShow 触发强制登出
|
||||
|
||||
## 文件清单(Files changed)
|
||||
|
||||
| 文件 | 操作 |
|
||||
|------|------|
|
||||
| `db/zqyy_app/migrations/2026-03-23__add_head_coach_manager_roles.sql` | 新建 |
|
||||
| `apps/backend/app/schemas/xcx_auth.py` | 修改 |
|
||||
| `apps/backend/app/routers/xcx_auth.py` | 修改 |
|
||||
| `apps/miniprogram/typings/index.d.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/utils/auth-guard.ts` | 新建 |
|
||||
| `apps/miniprogram/miniprogram/custom-tab-bar/index.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/app.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/login/login.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/apply/apply.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/reviewing/reviewing.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/no-permission/no-permission.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/task-list/task-list.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/task-detail/task-detail.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/notes/notes.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/performance/performance.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/performance-records/performance-records.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/board-customer/board-customer.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/board-coach/board-coach.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/customer-detail/customer-detail.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/customer-service-records/customer-service-records.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/chat/chat.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/chat-history/chat-history.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/my-profile/my-profile.ts` | 修改 |
|
||||
| `apps/miniprogram/miniprogram/pages/dev-tools/dev-tools.ts` | 修改 |
|
||||
| `docs/database/BD_Manual_auth_tables.md` | 修改 |
|
||||
Reference in New Issue
Block a user