44 lines
1.5 KiB
Python
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
|