Simon
|
78f60c6857
|
feat(v0.7.1): P0 修复 + 企微 SSO + RBAC 细粒度 + audit_log
P0 修复:
- /api/ready import 错误 (_get_engine + settings.create_redis_client)
- 删 agent.otp_secret/otp_enabled 双字段 (migration 026)
- 重建 021_rbac migration (IF NOT EXISTS 兼容)
P1 新增:
- 企微 SSO (auth_wecom_sso.py, useWeChatWorkSSO composable, PortalSelect UA 检测)
- RBAC 5 角色 × 4 资源 × 4 操作 × 3 范围 (rbac_service + seed_rbac + require_permission)
- audit_log 模型 + migration 027 + 服务 + API
- 管理后台 RBAC 权限矩阵 UI (PermissionsMatrix.vue)
质量:
- pytest 405 passed / 33 pre-existing failed / 4 xfailed (v0.7.1 引入失败 = 0)
- conftest GBK patch 强制 UTF-8 读 .env
- .gitignore 排除 *.b64 (含 admin token 凭据)
- DEPLOY-v0.7.1.md 7 步 runbook + 4 坑 + 回滚预案
|
2026-06-22 17:38:47 +08:00 |
|
Simon
|
364e688382
|
chore(release): v0.5.0-beta 发版准备
主要改动:
backend 业务:
- feat(error-codes): 统一错误码表 E1011/E1012 拆码
- E1011 AUTH_PASSWORD_WRONG: 本地密码错误
- E1012 AUTH_FIRST_LOGIN_PASSWORD_REQUIRED: 首次登录请先设置密码
- E1015 AUTH_OLD_PASSWORD_REQUIRED: 改密需要旧密码
- E1016 AUTH_OLD_PASSWORD_WRONG: 旧密码错误
- fix(agents): P0 降级放行时,如坐席已注册但未设密码,正确 raise 1012
(修复前会撞 1011 本地密码错误,与场景不符)
- feat(approval): 审批模块 (T审批/A审批)
- feat(config): approval_template_resource / approval_template_device 配置
- feat(main): /ready, /metrics, /version 端点(K8s 友好)
backend 测试:
- test(agents): 新增 test_agents.py — 3 个 Fix-4 降级登录测试
- 错误密码拒绝
- 缺密码拒绝
- 正确密码通过
pytest tests/test_agents.py → 3/3 通过
- test(conftest): 模块级 mock + slowapi 限流重置 + UTF-8 patch
解决 Windows pytest GBK 读 .env 失败 + 降级路径无法测试
仓库治理:
- chore(gitignore): 排除 .workbuddy/memory/(workbuddy 本地记忆)
- chore(docs): 重命名两份 IT 文档(前缀加智能区分版本)
部署与文档:
- docs: RELEASE_NOTES_v0.5.0-beta.md / dashboard.html / 需求-发版预览页面
- docs: 部署、架构、PRD、安全、评审报告等同步 v0.5.0-beta
- deploy-server: 打包脚本、nginx、docker-compose 版本号 bump
前端 (frontend-h5 / frontend-agent / frontend-admin / frontend-portal):
- index.html / package.json 版本号与构建号 bump
自动验收(RELEASE_NOTES L100-104):
- [x] pytest tests/test_agents.py -v → 3 passed
- [x] grep Bs7ucT backend frontend-h5 frontend-agent → 无输出
- [x] grep AppException(101[123]) backend → 仅 1 处(登录场景 1012)
- [ ] npm run build (frontend-h5 / frontend-agent) → 合并后跑
后续: 合并 feature/t-1-t4-merge → main,tag v0.5.0-beta
|
2026-06-15 14:14:58 +08:00 |
|
Claude
|
3735dc0367
|
feat(security): P0 安全止血 - WS token 改 header + 坐席本地密码
【workbuddy 推送 2026-06-14,任务 #10】
修复:
- P0-#4 WS token 泄露:服务端 ws.py 优先从 Authorization: Bearer header 取,
query param 仅作向后兼容降级路径(h5_websocket_endpoint 同)
- P0-#5 坐席本地密码:Agent 模型加 password_hash 字段(bcrypt),
坐席登录增加 password 字段(企微验证失败时备用),
新增 POST /agents/password 端点修改密码,
alembic 008 迁移脚本
新增/变更:
M backend/app/api/agents.py (+67 行,登录 password 验证 + 改密端点)
M backend/app/api/ws.py (~+30 行,header 优先 + query 降级)
M backend/app/models/agent.py (+10 行,password_hash 字段)
M backend/app/schemas/agent.py (+7 行,password 字段)
M frontend-agent/.../useWebSocket.ts (+5 行,Authorization header)
A backend/alembic/versions/008_add_agent_password.py
A docs/安全/secret-管理.md (P0-#1 长期方案规划)
【评审遗留 5 项,详见 docs/评审报告/workbuddy-2026-06-14-P0安全.md】
- [P0-#4-ws.ts] 浏览器 WebSocket API 不支持自定义 header,需改 Sec-WebSocket-Protocol
- [P0-#4-nginx] nginx access_log 没关闭,token 仍可能经 access_log 泄露
- [P0-#5-type] model Mapped[str] 严格模式下为 None 会报错,应改 Optional
- [P0-#5-fall] 企微降级放行路径不强制 password 验证,反削弱 P0-#5
- [P0-#5-dep] requirements.txt 缺 passlib 依赖,部署会 ImportError
【推 Gitea】
卡 #8: MariaDB 套件未装,Gitea 未启动。本次 commit 暂存本地,
Gitea 起来后一次 git push -u origin main 推送供 workbuddy 二次评审。
|
2026-06-14 19:32:36 +08:00 |
|