deps.py 957 B

12345678910111213141516171819202122232425262728293031323334353637
  1. from __future__ import annotations
  2. from dataclasses import dataclass
  3. from typing import Annotated
  4. from fastapi import Depends, Header, Query
  5. from sqlalchemy.orm import Session
  6. from app.db.session import get_db
  7. DbSession = Annotated[Session, Depends(get_db)]
  8. PageNumber = Annotated[int, Query(ge=1, description="页码")]
  9. PageSize = Annotated[int, Query(ge=1, le=200, description="每页数量")]
  10. @dataclass(frozen=True)
  11. class ActorContext:
  12. user_name: str
  13. roles: tuple[str, ...]
  14. mine_id: str | None = None
  15. def get_actor_context(
  16. x_user_name: str = Header(default="default"),
  17. x_user_roles: str = Header(default="viewer"),
  18. x_mine_id: str | None = Header(default=None),
  19. ) -> ActorContext:
  20. return ActorContext(
  21. user_name=x_user_name,
  22. roles=tuple(role.strip() for role in x_user_roles.split(",") if role.strip()),
  23. mine_id=x_mine_id,
  24. )
  25. Actor = Annotated[ActorContext, Depends(get_actor_context)]