login_logs.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from typing import Any, Optional
  2. from datetime import datetime
  3. from fastapi import APIRouter, Depends, HTTPException, Query
  4. from sqlalchemy.orm import Session
  5. from app.api.v1 import deps
  6. from app.models.user import User, UserRole
  7. from app.models.login_log import LoginMethod, AuthType
  8. from app.schemas.login_log import LoginLogListResponse
  9. from app.services.login_log_service import LoginLogService
  10. router = APIRouter()
  11. @router.get("/", response_model=LoginLogListResponse, summary="获取登录日志列表")
  12. def get_login_logs(
  13. db: Session = Depends(deps.get_db),
  14. current_user: User = Depends(deps.get_current_active_user),
  15. skip: int = 0,
  16. limit: int = 20,
  17. mobile: Optional[str] = None,
  18. ip_address: Optional[str] = None,
  19. status: Optional[int] = Query(None, description="1: Success, 0: Failed"),
  20. login_method: Optional[LoginMethod] = None,
  21. auth_type: Optional[AuthType] = None,
  22. start_date: Optional[datetime] = None,
  23. end_date: Optional[datetime] = None
  24. ) -> Any:
  25. """
  26. 获取统一认证登录日志。
  27. 只有超级管理员可以查看所有日志。
  28. 普通用户只能查看自己的日志(待定,目前假设只有管理员看运维日志)。
  29. """
  30. # 鉴权:只有 SUPER_ADMIN 和 DEVELOPER 可以查看运维日志?
  31. # 根据需求描述“运维管理里面有一个统一登录日志”,通常隐含管理员权限。
  32. if current_user.role not in [UserRole.SUPER_ADMIN, UserRole.DEVELOPER]:
  33. raise HTTPException(status_code=403, detail="权限不足")
  34. total, items = LoginLogService.get_logs(
  35. db=db,
  36. skip=skip,
  37. limit=limit,
  38. mobile=mobile,
  39. ip_address=ip_address,
  40. status=status,
  41. login_method=login_method,
  42. auth_type=auth_type,
  43. start_date=start_date,
  44. end_date=end_date
  45. )
  46. return {
  47. "total": total,
  48. "items": items
  49. }