Neo 18fbb2fddf refactor(auth): F1-5b BE-1 manager 角色移除 view_tasks 权限 (W1)
走查发现 manager(店长)进入小程序"任务"tab 收到 403 "权限不足"。
根因不在 require_permission(权限校验通过,missing=set()),而在
task_manager._get_assistant_id() 因 user_assistant_binding 无有效绑定
抛 403 "权限不足"(detail 与权限错误同名,误导走查方向)。

设计层冲突:task-list 是助教个人工作台业务概念,manager 没有"我自己
的任务"业务场景,监督需求由 board-coach 等汇总看板覆盖。

Neo 决策(2026-05-05):
> "任务的 tab 只有助教身份的用户可以进入并查看,让管理身份的用户
> 进入没有意义。因为他们使用业务场景中不存在任务方面的场景。"

→ 选 B 方案:权限矩阵层移除 manager 的 view_tasks。

变更:
- db/zqyy_app/migrations/20260505__remove_manager_view_tasks.sql
  DELETE FROM auth.role_permissions WHERE role_id=manager AND permission_id=view_tasks
- docs/database/changes/2026-05-05__remove_manager_view_tasks.md
  完整变更说明 + 兼容性 + 4 条校验 SQL + 幂等回滚

测试库执行 + 4 条校验全 PASS:
- manager 改前 5 项权限,改后 4 项(view_board* 保留)
- view_tasks 现绑定到 [coach, head_coach](manager 已剥离)
- coach / head_coach 助教工作台不受影响
- 典型 manager 用户 Neo (8778) 实际权限不再含 view_tasks

双口径走查(weixin-devtools-mcp):
- 4a live: relaunch 后 visibleTabs 从 [task, board, my] → [board, my]
  小程序 tabBar"任务"tab 自动隐藏(getVisibleTabs 基于权限自动重算)
- 强制调 GET /api/xcx/tasks 仍 403,但根因从 _get_assistant_id 错位
  转为 require_permission 正确拦截,语义清晰

不改的部分:
- task_manager._get_assistant_id() 不动(仍用于 coach/head_coach)
- require_permission("view_tasks") 路由保护不动(仍合理)
- 前端 auth-guard.ts 不改(getVisibleTabs 已基于 permissions 自动)

正式库同步说明:
- 本次仅在测试库执行,生产环境同步时 psql 执行 migration + 跑校验 SQL

审计:
- docs/audit/changes/2026-05-05__wave1_f1_5b_be1_task_list_403_root_cause.md
  含完整证据链 + 三方案 ABC 业务影响对比 + B 实施记录

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 18:43:35 +08:00
2026-04-10 06:24:13 +08:00

NeoZQYY Monorepo

台球门店运营助手一体化平台,整合 ETL 数据 Connector、微信小程序后端、小程序前端与管理后台。

项目结构

目录 说明 文档
apps/etl/connectors/feiqiu/ 飞球 ConnectorAPI → ODS → DWD → DWS docs/
apps/backend/ FastAPI 后端13 个路由 · JWT 双认证 · WebSocket README · API 参考
apps/miniprogram/ 微信小程序Donut + TDesign + TypeScript README
apps/admin-web/ 管理后台React + Vite + Ant Design README
apps/mcp-server/ MCP ServerAI 工具集成PostgreSQL 只读查询) README
packages/shared/ 共享包(枚举、金额精度、时间工具) README
db/etl_feiqiu/ ETL 数据库6 层 Schemameta/ods/dwd/core/dws/app README
db/zqyy_app/ 业务数据库auth 认证 + 任务队列 + 调度) README
docs/ 项目文档中心(架构、数据库、部署、审计) README
scripts/ 运维/工具脚本
tests/ Monorepo 级属性测试

快速开始

# 安装全部依赖(需要 uv
uv sync

# 运行 ETL
cd apps/etl/connectors/feiqiu
python -m cli.main --pg-dsn "$PG_DSN" --store-id "$STORE_ID" --api-token "$API_TOKEN"

# 启动后端 API
cd apps/backend
uvicorn app.main:app --reload

# 运行 ETL 单元测试
cd apps/etl/connectors/feiqiu
pytest tests/unit

配置

配置采用分层叠加:根 .env -> 应用 .env.local -> 环境变量 -> CLI 参数。

参见 .env.template 了解可用配置项。

技术栈

  • Python 3.10+, uv workspace4 个成员etl、backend、mcp-server、shared
  • PostgreSQL 四库:etl_feiqiu / test_etl_feiqiuETLzqyy_app / test_zqyy_app(业务)
  • FastAPI + Uvicorn后端 API
  • React 19 + Vite 6 + Ant Design 5管理后台独立 pnpm
  • 微信小程序原生 + Donut + TDesign + TypeScriptC 端)
  • JWT 双认证(管理后台用户名密码 + 小程序微信登录)
  • 多门店隔离(site_id + RLS
Description
桌球运营小程序 Monorepo 统一仓库
Readme 64 MiB
Languages
Python 79.6%
TypeScript 17.4%
PLpgSQL 1.9%
HTML 0.7%
PowerShell 0.4%