from __future__ import annotations from dataclasses import dataclass from typing import Annotated from fastapi import Depends, Header, Query from sqlalchemy.orm import Session from app.db.session import get_db DbSession = Annotated[Session, Depends(get_db)] PageNumber = Annotated[int, Query(ge=1, description="页码")] PageSize = Annotated[int, Query(ge=1, le=200, description="每页数量")] @dataclass(frozen=True) class ActorContext: user_name: str roles: tuple[str, ...] mine_id: str | None = None def get_actor_context( x_user_name: str = Header(default="default"), x_user_roles: str = Header(default="viewer"), x_mine_id: str | None = Header(default=None), ) -> ActorContext: return ActorContext( user_name=x_user_name, roles=tuple(role.strip() for role in x_user_roles.split(",") if role.strip()), mine_id=x_mine_id, ) Actor = Annotated[ActorContext, Depends(get_actor_context)]