Files
shaguabijia-app-server/docs/database/admin_audit_log.md
T
ouzhou 0e42e96ddb docs(admin): 补充管理后台 API 与数据库文档 (#12)
新增 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>
2026-06-06 15:58:23 +08:00

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)

关系

说明

  • JSON 列:detailJSON().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 仅作记录、不参与鉴权。