24 lines
1.0 KiB
Python
24 lines
1.0 KiB
Python
"""操作审计日志。"""
|
|
import json
|
|
import uuid
|
|
from datetime import datetime
|
|
|
|
from ..models import OperationLog
|
|
|
|
|
|
def record_operation(db, user: dict, action: str, *, request=None, task=None,
|
|
resource_type: str = "", resource_name: str = "", detail: dict | None = None):
|
|
"""将已登录用户的关键操作写入当前数据库事务。"""
|
|
client_ip = request.client.host if request and request.client else ""
|
|
user_agent = request.headers.get("user-agent", "")[:500] if request else ""
|
|
db.add(OperationLog(
|
|
id=str(uuid.uuid4()), created_at=datetime.utcnow(), username=user.get("username", ""),
|
|
is_admin=bool(user.get("is_admin")), action=action,
|
|
task_id=task.id if task else None,
|
|
app_id=task.app_id if task else None,
|
|
app_name=task.app_name if task else None,
|
|
resource_type=resource_type, resource_name=resource_name,
|
|
detail_json=json.dumps(detail or {}, ensure_ascii=False),
|
|
client_ip=client_ip, user_agent=user_agent,
|
|
))
|