Skip to content

Commit ecce375

Browse files
committed
separate service utils, improve role based auth middleware
1 parent e385119 commit ecce375

File tree

5 files changed

+22
-43
lines changed

5 files changed

+22
-43
lines changed

backend/app/middleware/auth.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import firebase_admin.auth
55
from ..services.implementations.user_service import UserService
66
from ..utilities.db_utils import get_db
7-
from ..schemas.user import UserRole
7+
from ..utilities.service_utils import get_user_service
88
from functools import wraps
99
from typing import Set
1010

@@ -56,15 +56,17 @@ async def get_current_user(
5656
def require_roles(allowed_roles: Set[str]):
5757
def decorator(func):
5858
@wraps(func)
59-
async def wrapper(*args, current_user=Depends(get_current_user), **kwargs):
59+
async def wrapper(
60+
*args,
61+
current_user=Depends(get_current_user),
62+
user_service: UserService = Depends(get_user_service),
63+
**kwargs
64+
):
6065
try:
61-
# Get user role using the token from current_user
62-
user_service = UserService(kwargs.get('db'))
6366
user_role = user_service.get_user_role_by_auth_id(
6467
firebase_admin.auth.verify_id_token(current_user["token"])["uid"]
6568
)
6669

67-
# Check if user's role is allowed
6870
if user_role not in allowed_roles:
6971
raise HTTPException(
7072
status_code=403,

backend/app/middleware/role_auth.py

Lines changed: 0 additions & 29 deletions
This file was deleted.

backend/app/routes/auth.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,12 @@
44
from ..services.implementations.auth_service import AuthService
55
from ..services.implementations.user_service import UserService
66
from ..utilities.db_utils import get_db
7+
from ..utilities.service_utils import get_auth_service
78
from ..middleware.auth import get_current_user
89
import logging
910

1011
router = APIRouter(prefix="/auth", tags=["auth"])
1112

12-
def get_auth_service(db: Session = Depends(get_db)):
13-
logger = logging.getLogger(__name__)
14-
return AuthService(logger=logger, user_service=UserService(db))
15-
16-
1713
@router.post("/login", response_model=AuthResponse)
1814
async def login(
1915
credentials: LoginRequest,

backend/app/routes/user.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from app.schemas.user import UserCreateRequest, UserCreateResponse
55
from app.services.implementations.user_service import UserService
66
from app.utilities.db_utils import get_db
7+
from app.utilities.service_utils import get_user_service
78

89
router = APIRouter(
910
prefix="/users",
@@ -15,10 +16,6 @@
1516
# allow signup methods other than email (like sign up w Google)??
1617

1718

18-
def get_user_service(db: Session = Depends(get_db)):
19-
return UserService(db)
20-
21-
2219
@router.post("/", response_model=UserCreateResponse)
2320
async def create_user(
2421
user: UserCreateRequest, user_service: UserService = Depends(get_user_service)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from fastapi import Depends
2+
from sqlalchemy.orm import Session
3+
from ..services.implementations.user_service import UserService
4+
from ..services.implementations.auth_service import AuthService
5+
from .db_utils import get_db
6+
import logging
7+
8+
def get_user_service(db: Session = Depends(get_db)):
9+
return UserService(db)
10+
11+
def get_auth_service(db: Session = Depends(get_db)):
12+
logger = logging.getLogger(__name__)
13+
return AuthService(logger=logger, user_service=UserService(db))

0 commit comments

Comments
 (0)