From b9a9e4e094e9625b2191076e0391224a00058b1d Mon Sep 17 00:00:00 2001 From: IluaAir Date: Sun, 27 Jul 2025 13:53:32 +0300 Subject: [PATCH] current or admin dep created --- src/api/dependacies/user_dep.py | 23 ++++++++++++++++++++++- src/api/v1/users.py | 6 +++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/api/dependacies/user_dep.py b/src/api/dependacies/user_dep.py index aab3055..3eabbbe 100644 --- a/src/api/dependacies/user_dep.py +++ b/src/api/dependacies/user_dep.py @@ -1,6 +1,6 @@ from typing import Annotated -from fastapi import HTTPException, Depends +from fastapi import HTTPException, Depends, Path from fastapi.security import OAuth2PasswordBearer from jwt import InvalidTokenError @@ -49,3 +49,24 @@ async def get_admin_user(db: sessionDep, current_user: ActiveUser): AdminUser = Annotated[TokenData, Depends(get_admin_user)] + + +async def user_or_admin_path(db: sessionDep, id: int, current_user: ActiveUser): + if current_user.id == id: + return current_user + else: + admin = await get_admin_user(db, current_user) + return admin + + +async def user_or_admin( + db: sessionDep, current_user: ActiveUser, id: Annotated[int, Path()] +): + if current_user.id == id: + return current_user + else: + admin = await get_admin_user(db, current_user) + return admin + + +CurrentOrAdmin = Annotated[TokenData, Depends(user_or_admin)] diff --git a/src/api/v1/users.py b/src/api/v1/users.py index a03abd4..9131fac 100644 --- a/src/api/v1/users.py +++ b/src/api/v1/users.py @@ -1,6 +1,6 @@ from fastapi import APIRouter -from src.api.dependacies.user_dep import ActiveUser, AdminUser +from src.api.dependacies.user_dep import ActiveUser, AdminUser, CurrentOrAdmin from src.api.dependacies.db_dep import sessionDep from src.core.settings import settings from src.services.users import UserService @@ -20,6 +20,6 @@ async def get_all_users(db: sessionDep, _: AdminUser): @router.get("/{id}") -async def get_user_by_id(db: sessionDep, id: int, _: AdminUser): +async def get_user_by_id(db: sessionDep, id: int, _: CurrentOrAdmin): user = await UserService(db).get_user_by_filter_or_raise(id=id) - return user \ No newline at end of file + return user