"""Admin 认证 schemas。""" from __future__ import annotations from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class AdminLoginRequest(BaseModel): username: str = Field(..., min_length=1, max_length=64) password: str = Field(..., min_length=1, max_length=128) class AdminOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: int username: str role: str status: str created_at: datetime last_login_at: datetime | None = None # 该管理员当前角色的有效可见页(= 左侧导航项 key);仅登录 / /me 填充,列表接口默认空。 # 前端据此过滤左侧导航(super_admin = 全部页;role=="custom" = pages_override)。见 permissions.py。 pages: list[str] = [] # 「自定义」可见页原始勾选集(role=="custom" 时非空);列表接口下发,供权限管理页编辑回填勾选。 # 普通角色为 None。from_attributes 自动从 ORM 列取。 pages_override: list[str] | None = None # 明文登录密码:仅「管理员账号列表」(super_admin 专属路由)填充,供权限管理页编辑时复看; # 无留存(脚本建的超管 / 旧账号)为 None → 前端不显示。登录 / /me 不下发(保持 None)。 password: str | None = None class AdminLoginResponse(BaseModel): access_token: str token_type: str = "Bearer" expires_in: int = Field(..., description="access_token 剩余秒数(过期重新登录)") admin: AdminOut