Alejandría

Busca en Alejandría

Lenguajes y marcos

Hasura GraphQL engine

Motor que expone APIs GraphQL sobre fuentes de datos con reglas de acceso configurables.

01

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.

02

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.