0e42e96ddb
新增 admin 模块接口文档(auth login/me、admins CRUD、audit-logs、feedback 处理、stats 概览、user coins/detail/status、wallet 流水、withdraw 对账/刷新/列表) + admin_user/admin_audit_log 两张表文档,更新 api/database README 索引。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: OuYingJun1024 <1034284404@qq.com> Reviewed-on: #12 Co-authored-by: ouzhou <ouzhou@wonderable.ai> Co-committed-by: ouzhou <ouzhou@wonderable.ai>
2.0 KiB
2.0 KiB
admin_audit_log — 运营后台操作审计日志
模型
app/models/admin.py| 关联接口 admin-audit-logs | ← 表索引
每个写操作(改钱/改状态/处理反馈等)落一条,记录"谁在何时、对谁、做了什么、前后值"。仅追加、不可删,用于追溯。admin_username / target_id 冗余存字符串,即使关联对象被删/改名也能追溯。
字段
| 列 | 类型 | 约束 / 默认 | 说明 |
|---|---|---|---|
id |
Integer | PK, autoincrement | |
admin_id |
Integer | FK→admin_user.id, index, NOT NULL | 操作者 |
admin_username |
String(64) | NOT NULL | 冗余操作者用户名(改名/禁用后仍可追溯) |
action |
String(64) | index, NOT NULL | 操作类型,如 user.coins.grant / user.status.set / withdraw.refresh / feedback.handle |
target_type |
String(32) | NOT NULL | 被操作对象类型,如 user / withdraw / feedback |
target_id |
String(64) | nullable | 被操作对象 id(用字符串以兼容 out_bill_no 等非整型主键) |
detail |
JSON | nullable | 上下文 + 前后值,如 {"amount":1000,"reason":"...","before":{...},"after":{...}} |
ip |
String(64) | nullable | 操作者客户端 IP(取自 X-Forwarded-For 首段,仅记录不鉴权) |
created_at |
DateTime(tz) | server_default now(), index, NOT NULL | 操作时间 |
索引与约束
- PK:
id - index:
ix_admin_audit_log_admin_id(admin_id)、ix_admin_audit_log_action(action)、ix_admin_audit_log_created_at(created_at)
关系
admin_id→admin_user.id(多对一)
说明
- JSON 列:
detail用JSON().with_variant(JSONB(), "postgresql")—— PG 上 JSONB,SQLite 退化为通用 JSON(同comparison_record.raw_payload)。 - 只追加:无更新/删除接口,审计不可篡改。
- IP 可伪造:
X-Forwarded-For可被客户端伪造,nginx 必须用proxy_set_header X-Forwarded-For $remote_addr覆盖;审计 IP 仅作记录、不参与鉴权。