feat: improve operations admin
This commit is contained in:
+25
@@ -891,3 +891,28 @@
|
||||
- 说明:本条为补录——T-306 复核实际发生在 2026-07-03 稍早,当时只在对话中给出结论、未落 progress.md,现补齐。
|
||||
- 结论:**达标,且实现超出文档要求**。P1-1 SSRF:协议白名单 + `getaddrinfo` 解析后逐 IP 校验(not_global/private/loopback/link_local/reserved/multicast/unspecified)+ 处理 IPv6 映射 IPv4(`::ffff:169.254.169.254`)+ 重定向手动逐跳 re-validate(堵 30x 绕过)+ Content-Length 与流式双重大小上限;测试覆盖回环/云元数据/重定向内网/超大响应均「拒绝且不扣点」。P2-1 全局 `REST_FRAMEWORK` 默认空认证、P2-2 生成/认证限流、P2-3 充值金额上限均落地含测试。
|
||||
- 复核发现的残留(已登记):① DNS rebinding TOCTOU(校验解析与 requests 各解析一次,未钉 IP)→ 已登记 Backlog;② DRF 限流依赖共享缓存,多 worker 下 LocMemCache 每进程失效 → 已登记 T-403。
|
||||
|
||||
## 2026-07-03 T-401 运营后台完善
|
||||
|
||||
- 状态:DONE
|
||||
- 变更:
|
||||
- `apps/billing/services.py`:新增 `adjust_wallet_points()`、`WalletAdjustment` 和调点错误类型;手工调点必须非 0、必须有原因,在事务内锁 `UserWallet`,拒绝扣成负数,并写 `PointsLedger(change_type=adjust)`。
|
||||
- `apps/users/admin.py` / `apps/users/templates/admin/users/userwallet/adjust_points.html`:新增钱包后台专用“手工调点”入口;钱包余额字段继续只读,提交表单后才调用计费层服务写余额和流水;用户列表显示钱包余额;API Key 后台保持 prefix/hash 摘要展示,不回显明文或完整 hash。
|
||||
- `apps/billing/admin.py`:增强计费规则、汇率、充值订单、点数流水和调用记录的后台检索/列表配置;订单、流水、调用记录保持只读。
|
||||
- `apps/billing/tests.py` / `apps/users/tests.py`:新增调点服务和 admin 测试,覆盖加点/扣点、原因必填、拒绝透支、后台调点写流水、直接提交钱包 change form 不改余额、API Key 后台不泄露明文和完整 hash。
|
||||
- 同步更新 `README.md`、`docs/00-ai-start-here.md`、`docs/04-architecture.md`、`docs/routes.md`、`docs/06-tasks.md`、`docs/current-state.md`、`docs/project-brief.md`、`docs/project-onepager.md`。
|
||||
- 验证:
|
||||
- `./init.ps1`:开工前通过;收尾通过。
|
||||
- `py -3.12 -m py_compile apps\billing\services.py apps\billing\admin.py apps\billing\tests.py apps\users\admin.py apps\users\tests.py`:通过。
|
||||
- `py -3.12 manage.py check`:通过,0 issues。
|
||||
- `py -3.12 manage.py makemigrations --check --dry-run`:通过,No changes detected。
|
||||
- `Test-NetConnection 43.128.3.240 -Port 3306`:`TcpTestSucceeded=True`。
|
||||
- `py -3.12 manage.py test apps.billing.tests.BillingServiceTests apps.users.tests.UserAdminOperationTests --noinput --keepdb --verbosity 2`:通过,18 tests OK。
|
||||
- `py -3.12 manage.py test apps.billing.tests.BillingCoreModelTests apps.billing.tests.PricingCalculationTests apps.billing.tests.BillingServiceTests apps.users.tests --noinput --keepdb --verbosity 2`:通过,32 tests OK。
|
||||
- 尝试 `py -3.12 manage.py test apps.billing apps.users --noinput --keepdb --verbosity 2`:未取得单次全绿;运行中远程 MySQL 出现 `OperationalError 2003/2013`、连接重置与事务中断,已通过用例无 T-401 断言失败。
|
||||
- 尝试 `py -3.12 manage.py test apps.billing.tests.ConcurrentDebitTests --noinput --keepdb --verbosity 2`:测试体显示 `ok`,但 teardown/flush 阶段远程 MySQL 再次连接超时,被 Django 记为 ERROR。
|
||||
- `py -3.12 -m compileall apps config`:通过。
|
||||
- `git diff --check`:通过,仅 Windows CRLF 提示。
|
||||
- 阻塞:T-401 功能无阻塞;完整大套件单次全绿仍受远程 MySQL 连接稳定性影响。
|
||||
- 决策:运营手工调点不开放直接编辑 `UserWallet.points_balance`,只通过 `adjust_wallet_points()` 统一落账;后台订单、流水、调用记录继续只读,避免运营后台成为账目篡改入口。
|
||||
- 下一步:领取 T-402 完整验收 MVP。
|
||||
|
||||
Reference in New Issue
Block a user