3.1 KiB
3.1 KiB
权限直连审计记录
文档状态:当前审计证据,用于 R3 发布前权限直连审计。
对应 Issue:issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv / R3。
1. 审计目标
本轮验证 A7 的导航收口没有掩盖服务端授权缺口。直连页面或 API 时,用户只能访问其角色授权或数据范围内的内容;前端隐藏不能替代服务端权限。
2. 自动化覆盖
新增 client/tests/e2e/permission-direct-access.spec.ts,覆盖:
- 页面直连:
/budgets、/ap-operations、/system/integrations/erp、/travel-requests、/invoice-pool、/contracts-registry、/payment-batches。 - API 直连:
/api/budgets、/api/ap-operations、/api/payment-batches、/api/integrations/erp/master-data/status、/api/invoice-pool、/api/travel-requests、/api/contracts-registry、/api/auth/wecom/config。 - 角色:普通员工、主管、财务、财务主管、管理员。
3. 权限矩阵
| 角色 | 直连路径/API | 期望 | 自动化结论 |
|---|---|---|---|
| 普通员工 | 预算、AP、ERP、付款批次 | 页面进入 /403;API 返回 403 或功能门禁 409,不得返回业务数据 |
通过 |
| 普通员工 | 差旅、票据、合同台账 | 可以进入自助或范围型页面;接口必须收敛到本人、本人票据、本人项目或功能门禁 | 通过 |
| 主管 | AP、ERP、付款批次 | 页面进入 /403;API 返回 403 或功能门禁 409,不得返回业务数据 |
通过 |
| 主管 | 预算 | 允许访问角色授权范围 | 通过 |
| 财务 | 票据、付款/AP | 允许访问财务授权范围或功能门禁 | 通过 |
| 财务 | ERP 管理 | 页面和 API 均拒绝 | 通过 |
| 财务主管/管理员 | ERP 或系统配置 | 允许访问授权范围;配置探活不得返回 secret/password/token 明文字段 |
通过 |
说明:AP 和付款批次接口存在 feature gate;当功能门禁先返回 409 时,结论是“未泄露数据”,但不等同于证明权限拒绝。
4. 验证命令
cd client && npm run typecheck
cd client && npm run build
cd client && npm run test:e2e -- permission-direct-access.spec.ts settings-governance.spec.ts login-portal-ux.spec.ts --workers=1
python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv
git diff --check
5. 执行结果
2026-05-10 已执行:
cd client && npm run typecheck:通过。cd client && npm run build:通过。cd client && npm run test:e2e -- permission-direct-access.spec.ts settings-governance.spec.ts login-portal-ux.spec.ts --workers=1:本地服务启动后通过,10 passed。python3 /home/shunli/.codex/skills/plan/scripts/validate_issues_csv.py issues/2026-05-10_12-39-37-release-readiness-live-smoke.csv:通过。git diff --check:通过。
第一次 E2E 执行失败原因为 http://127.0.0.1:3000 未启动;启动本地 OA 服务后重跑通过,未发现权限泄漏。R3 可进入完成状态,下一步才允许进入 R4 只读部署预检。