25 lines
898 B
Python
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
|