Files
Neo-ZQYY/docs/audit/changes/2026-03-23__role-routing-page-guard.md
Neo 14a12342b5 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>
2026-04-20 06:35:42 +08:00

76 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 变更审计记录Change Audit Record
- 日期/时间2026-03-23 08:00:00
- Prompt-IDP20260323-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-permissionapproved 跳转改为 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` | 修改 |