seaislee1209 85f76d8543 feat: v0.8.2~v0.8.4 — 管理后台 UI 修复 + 团队详情重构 + 审计日志系统
v0.8.2: DatePicker/Select 暗色主题、公告跑马灯、Toast 全局化、失败原因 tooltip
v0.8.3: 团队详情抽屉→弹窗重构 + 修改秒数池功能 + member_count 修复
v0.8.4: AdminAuditLog 模型 + 12 处管理操作埋点 + 日志查询页面(/admin/logs)

审计日志覆盖所有管理员 mutation 操作(充值、修改额度、创建/禁用用户等),
记录操作人、变更前后值、IP 地址,支持按操作类型/操作人/日期筛选。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 01:18:44 +08:00

37 lines
2.3 KiB
Python

# Generated by Django 4.2.29 on 2026-03-15 17:11
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('accounts', '0004_data_migrate_default_team'),
]
operations = [
migrations.CreateModel(
name='AdminAuditLog',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('operator_name', models.CharField(max_length=150, verbose_name='操作人用户名')),
('action', models.CharField(choices=[('team_create', '创建团队'), ('team_update', '更新团队'), ('team_topup', '团队充值'), ('team_set_pool', '设置团队额度池'), ('team_create_admin', '创建团队管理员'), ('user_create', '创建用户'), ('user_quota_update', '更新用户额度'), ('user_status_toggle', '切换用户状态'), ('settings_update', '更新系统设置'), ('member_create', '创建团队成员'), ('member_quota_update', '更新成员额度'), ('member_status_toggle', '切换成员状态')], max_length=30, verbose_name='操作类型')),
('target_type', models.CharField(max_length=20, verbose_name='目标类型')),
('target_id', models.IntegerField(blank=True, null=True, verbose_name='目标ID')),
('target_name', models.CharField(blank=True, default='', max_length=200, verbose_name='目标名称')),
('before', models.JSONField(blank=True, null=True, verbose_name='变更前')),
('after', models.JSONField(blank=True, null=True, verbose_name='变更后')),
('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='IP地址')),
('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='操作时间')),
('operator', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audit_logs', to=settings.AUTH_USER_MODEL, verbose_name='操作人')),
],
options={
'verbose_name': '审计日志',
'verbose_name_plural': '审计日志',
'ordering': ['-created_at'],
},
),
]