from fastapi import Depends, HTTPException, status from fastapi.security import OAuth2PasswordBearer from sqlalchemy.orm import Session from . import models from .database import get_db from .security import decode_access_token oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/auth/login") def get_current_user( token: str = Depends(oauth2_scheme), db: Session = Depends(get_db) ) -> models.User: credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Не удалось подтвердить учётные данные", headers={"WWW-Authenticate": "Bearer"}, ) payload = decode_access_token(token) if payload is None: raise credentials_exception user_id = payload.get("sub") if user_id is None: raise credentials_exception user = db.query(models.User).filter(models.User.id == int(user_id)).first() if user is None or not user.is_active: raise credentials_exception return user def require_admin(user: models.User = Depends(get_current_user)) -> models.User: if user.role != models.Role.admin: raise HTTPException(status_code=403, detail="Требуются права администратора") return user