Files
fastapi/app/services/audit_service.py
T

39 lines
1.1 KiB
Python
Raw Normal View History

from sqlalchemy.orm import Session
from app.core.context import UserContext
from app.models.audit import AuditLog
from app.repositories.audit_repository import AuditRepository
class AuditService:
"""审计服务:统一记录关键接口调用和资源访问。"""
def __init__(self, db: Session) -> None:
self.db = db
self.repo = AuditRepository(db)
def log(
self,
ctx: UserContext,
action: str,
resource_type: str,
resource_id: str | None = None,
session_id: int | None = None,
metadata: dict | None = None,
) -> None:
"""审计写入:保存用户、动作、资源和请求元数据。"""
self.repo.create(
AuditLog(
user_id=ctx.user_id,
tenant_id=ctx.tenant_id,
session_id=session_id,
action=action,
resource_type=resource_type,
resource_id=resource_id,
request_id=ctx.request_id,
ip_address=ctx.ip_address,
user_agent=ctx.user_agent,
metadata_=metadata,
)
)