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