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

5.0 KiB
Raw Blame History

变更审计记录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 字段
  • 后端 SchemaWxLoginResponseUserStatusResponse 增加 role 字段
  • 小程序全局:app.ts checkAuthStatus 按状态路由disabled 强制登出
  • 小程序权限守卫:新建 utils/auth-guard.ts包含角色→tab 映射、角色→首页映射、页面→角色权限矩阵、checkPageAccess 函数
  • 小程序 tab-barglobalData.visibleTabs 动态读取可见 tab
  • 小程序登录页:登录成功后保存 role、syncVisibleTabs、按角色跳转
  • 小程序 15 个业务页面onShow 添加 checkPageAccess 守卫
  • 小程序 3 个状态页apply/reviewing/no-permissionapproved 跳转改为 getRoleHome(role)
  • 全局类型:authUser 增加 roleglobalData 增加 visibleTabs
  • BD 手册:更新 BD_Manual_auth_tables.md 角色从 4 条到 6 条

风险与回滚Risk & Rollback

  • 风险点:
    • checkPageAccess 每次 onShow 都请求 /api/xcx/me,高频页面切换可能增加后端压力(后续可加缓存/节流)
    • 角色为空时 tab 只显示"我的",新用户首次登录如果后端未返回 role 会只看到我的页
    • 迁移脚本依赖 auth.rolesauth.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/meapproved 用户响应应包含 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 修改