Phase 3.1: Instance password AES-256-GCM encryption Phase 3.2: SQL audit rule engine (10 rules) Phase 3.3: Auto-audit on ticket creation Phase 3.4: Operation audit logs + GET /audit/logs Tests: 44 -> 85 (41 new), Frontend: AuditLogsPage
28 lines
884 B
Python
28 lines
884 B
Python
"""Audit log endpoints."""
|
|
from typing import Optional
|
|
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.core.database import get_db
|
|
from app.core.security import require_role
|
|
from app.models.user import User
|
|
from app.services.audit_log_service import AuditLogService
|
|
|
|
router = APIRouter(prefix="/audit", tags=["审计日志"])
|
|
|
|
|
|
@router.get("/logs")
|
|
async def list_audit_logs(
|
|
page: int = Query(1, ge=1),
|
|
page_size: int = Query(20, ge=1, le=100),
|
|
user_id: Optional[int] = None,
|
|
action: Optional[str] = None,
|
|
target_type: Optional[str] = None,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(require_role("admin", "dba")),
|
|
):
|
|
return await AuditLogService.list_logs(
|
|
db, page=page, page_size=page_size,
|
|
user_id=user_id, action=action, target_type=target_type,
|
|
)
|