39 lines
1.1 KiB
Python
39 lines
1.1 KiB
Python
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,
|
|
)
|
|
)
|