| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """FastAPI dependencies: DB session, current user, role guards."""
- from fastapi import Depends, HTTPException, status
- from fastapi.security import OAuth2PasswordBearer
- from sqlalchemy.orm import Session
- from app.database import get_db
- from app.core.security import decode_access_token
- from app.models.user import User
- oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/api/auth/login")
- def get_current_user(
- token: str = Depends(oauth2_scheme),
- db: Session = Depends(get_db),
- ) -> User:
- payload = decode_access_token(token)
- if payload is None:
- raise HTTPException(
- status_code=status.HTTP_401_UNAUTHORIZED,
- detail="无效或过期的认证凭据",
- headers={"WWW-Authenticate": "Bearer"},
- )
- user_id: int | None = payload.get("sub")
- if user_id is None:
- raise HTTPException(
- status_code=status.HTTP_401_UNAUTHORIZED,
- detail="无效的认证凭据",
- )
- user = db.query(User).filter(User.id == user_id, User.del_flag == 0).first()
- if user is None:
- raise HTTPException(
- status_code=status.HTTP_401_UNAUTHORIZED,
- detail="用户不存在",
- )
- if user.status != 1:
- raise HTTPException(
- status_code=status.HTTP_403_FORBIDDEN,
- detail="用户已被禁用",
- )
- return user
- def require_roles(*role_codes: str):
- """Dependency factory: currently bypasses role check."""
- def _check(current_user: User = Depends(get_current_user)):
- return current_user
- return _check
|