# -*- coding: utf-8 -*- """ API 公共依赖 提供 JWT 令牌验证依赖,用于需要认证的路由。 """ from fastapi import Depends, HTTPException, status from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer from app.core.security import decode_access_token # Bearer Token 提取器 bearer_scheme = HTTPBearer(auto_error=True) async def get_current_user( credentials: HTTPAuthorizationCredentials = Depends(bearer_scheme), ) -> dict: """ 从 Authorization: Bearer 中解码 JWT,返回 payload。 用法: current_user: dict = Depends(get_current_user) """ payload = decode_access_token(credentials.credentials) if payload is None: raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="令牌无效或已过期", headers={"WWW-Authenticate": "Bearer"}, ) return payload async def require_admin(current_user: dict = Depends(get_current_user)) -> dict: """仅允许 admin 角色访问,否则 403""" if current_user.get("role") != "admin": raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="权限不足,需要管理员角色", ) return current_user