api-admim/app/rbac/permissions.py

44 lines
1.5 KiB
Python

from typing import List
from fastapi import Depends, HTTPException, status
from fastapi_users import models
from sqlalchemy.ext.asyncio import AsyncSession
from app.database.session import get_db
from app.rbac.auth import current_active_user
from fastapi import Depends, HTTPException, status
from typing import List
from fastapi_users import models
from app.multi_tenant.tenant_utils import get_tenant_schema
def verify_permissions(required_permissions: List[int]):
async def permission_dependency(
user: models.UP = Depends(current_active_user),
):
if user is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Usuário não autenticado.",
)
# Coleta todas as permissões do usuário
user_permissions = [perm.id for papel in user.papeis for perm in papel.permissoes]
# Se não houver permissões específicas necessárias, qualquer usuário autenticado tem acesso
if not required_permissions:
return user
# Verifica se o usuário possui pelo menos uma das permissões necessárias
if not any(perm in user_permissions for perm in required_permissions):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Você não tem as permissões necessárias para acessar este recurso.",
)
return user # Retorna o objeto `user` para acesso em outras funções
return permission_dependency