techprotrade's picture
Deploy ATOM FastAPI command center runtime (part 4)
4b9d59b verified
Raw
History Blame Contribute Delete
1.27 kB
"""
Role-Based Access Control (RBAC) Utilities
Provides role checking dependencies for FastAPI routes.
"""
import logging
from typing import Callable
from fastapi import Depends, HTTPException, status
from core.auth import get_current_user
from core.models import User, UserRole
logger = logging.getLogger(__name__)
def require_role(required_role: UserRole) -> Callable[[User], User]:
"""
Dependency that requires a specific user role.
Args:
required_role: The UserRole required to access the endpoint
Returns:
Dependency function that returns the user if authorized, raises 403 otherwise
Raises:
HTTPException: 403 Forbidden if user doesn't have required role
"""
async def role_checker(current_user: User = Depends(get_current_user)) -> User:
if current_user.role != required_role:
logger.warning(
f"Access denied: user {current_user.id} has role {current_user.role}, "
f"required {required_role}"
)
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail=f"Insufficient permissions. Required role: {required_role}"
)
return current_user
return role_checker