api-admim/app/rbac/rbac.py

25 lines
898 B
Python

# from models import User, Permissao, Papel
from app.database.models import RbacUser, RbacPermissao, RbacPapel, rbac_papel_permissoes, rbac_papeis_usuario
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
class RBAC:
@staticmethod
async def has_permission(user: RbacUser, permission_id: int, session: AsyncSession) -> bool:
# Carregar permissões associadas aos papéis do usuário
result = await session.execute(
select(RbacPermissao)
.join(rbac_papel_permissoes)
.join(RbacPapel)
.join(rbac_papeis_usuario)
.where(rbac_papeis_usuario.c.user_uuid == user.id)
.where(rbac_papel_permissoes.c.permissao_id == permission_id)
)
permissoes = result.scalars().all()
# Verificar se a permissão está presente
return len(permissoes) > 0