En pocas palabras
Motor que expone APIs GraphQL sobre fuentes de datos con reglas de acceso configurables.
Qué problema resuelve
Código repetitivo de endpoints y agregación para consultar datos desde aplicaciones.
Cuándo utilizarlo
APIs de datos. Ejemplo: exponer pedidos y sus relaciones con permisos por usuario.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
En el Radar compartido: Trial (valoración de la edición aportada).
Cómo funciona
Genera un esquema de acceso a partir de datos y configuración. Las reglas de autorización limitan operaciones y filas según identidad y contexto.
Ejemplo de uso
Exponer consultas de pedidos filtradas por organización y permitir solo columnas necesarias. Probar que un usuario de otra organización no obtiene registros ni por relaciones anidadas.
Versiones y modelos
| Versión | Modelo |
|---|---|
| Hasura v2 | Motor open source centrado en bases de datos (PostgreSQL y otras); metadatos en YAML; permisos por rol |
| Hasura DDN (v3) | Supergrafo con conectores de datos, construcción por subgrafos y CLI ddn; orientado a federar muchos dominios |
Los conceptos de permisos y relaciones son comunes; la configuración difiere.
Permisos por rol y fila (v2)
# metadata/databases/default/tables/public_solicitudes.yaml
table: { name: solicitudes, schema: public }
select_permissions:
- role: asesor
permission:
columns: [id, estado, monto, created_at]
filter:
sucursal_id: { _eq: X-Hasura-Sucursal-Id }
limit: 100
update_permissions:
- role: asesor
permission:
columns: [estado]
filter:
_and:
- sucursal_id: { _eq: X-Hasura-Sucursal-Id }
- estado: { _in: [PENDIENTE, EN_REVISION] }
check:
estado: { _in: [EN_REVISION, DOCUMENTOS_SOLICITADOS] }
Las variables X-Hasura-* provienen del JWT del usuario. El filtro se aplica también a relaciones anidadas, lo que evita fugas por la vía de una consulta profunda.
Consulta resultante
query SolicitudesPendientes {
solicitudes(
where: { estado: { _eq: "PENDIENTE" } }
order_by: { created_at: asc }
) {
id
monto
cliente {
nombre
telefono
}
}
}
Hasura compila la consulta a un único SQL eficiente, en lugar de resolver campo a campo como un servidor GraphQL tradicional.
Extender con lógica de negocio
| Mecanismo | Uso |
|---|---|
| Actions | Mutaciones personalizadas implementadas en un servicio propio (aprobar un crédito) |
| Event triggers | Llamar a un webhook al insertar o actualizar filas |
| Remote schemas | Unir otro servidor GraphQL al esquema |
| Cron triggers | Tareas programadas |
La lógica con reglas de negocio (validaciones, transiciones de estado) debe ir en actions o servicios, no en permisos complejos.
Protección en producción
- Allow lists: solo se aceptan consultas registradas previamente.
- Límites de profundidad, de nodos y de filas; tiempos de espera en la base de datos.
- Desactivar la consola y la introspección pública.
- Pruebas automáticas de permisos por rol, incluyendo intentos de acceso cruzado entre sucursales u organizaciones.
Criterios de implementación
Controlar complejidad, paginación y consultas costosas. Separar reglas transaccionales del acceso genérico a datos y evaluar límites de federación y migraciones.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.