CEL: Lenguaje para Evaluar Datos de Forma Segura

Fuentes: CEL by Example#

CEL (Common Expression Language) es un lenguaje de evaluación de expresiones diseñado para ser rápido, portable y seguro. Imagina que tienes datos, ya sean números, texto, mensajes Protobuf o incluso objetos JSON, y necesitas tomar decisiones basadas en esos datos. CEL te permite hacerlo de manera eficiente y consistente. No es un lenguaje de programación completo, sino más bien una forma concisa de expresar condiciones y transformaciones sobre datos.

¿Cómo funciona?

CEL opera sobre datos, permitiéndote realizar comparaciones, manipular colecciones, trabajar con fechas y horas, y combinar lógica compleja. Por ejemplo, puedes verificar si un usuario tiene más de 18 años (user.age > 18), o si su correo electrónico pertenece a un dominio específico (str.contains(user.email, “@example.com”)). Una de sus fortalezas es la manipulación de colecciones. Puedes verificar si un usuario tiene un rol específico (user.roles in [“admin”, “editor”]), buscar elementos que cumplan una condición (exists(user.roles, r, r == “admin”)), o incluso filtrar una lista de roles para obtener solo los roles elevados (filter(user.roles, r, r != “viewer”)).

CEL también facilita el manejo de fechas y horas, permitiéndote calcular duraciones y comparar momentos. Además, puedes transformar los datos de entrada para crear nuevos objetos. Por ejemplo, puedes crear un mapa que elimine información sensible (PII) de un usuario o transformar una lista de roles en una lista con información adicional, como si un rol es elevado o no.

¿Para qué sirve y quién lo usaría?

CEL se utiliza ampliamente en diversas plataformas y herramientas. Kubernetes lo usa para controlar el acceso a los recursos, Google Cloud IAM para definir condiciones de acceso, Firebase para reglas de seguridad, Envoy Proxy para enrutamiento y Protovalidate para validar datos. Cualquier desarrollador que necesite tomar decisiones basadas en datos de forma segura y eficiente puede beneficiarse de CEL.

Consideraciones:

Aunque CEL es poderoso, no es un lenguaje de programación de propósito general. Su objetivo es evaluar expresiones sobre datos, no ejecutar programas complejos. Si necesitas lógica más compleja, un lenguaje de programación completo podría ser más adecuado. Además, es importante entender que CEL tiene sus propias reglas de sintaxis y semántica, que debes aprender para usarlo correctamente. Finalmente, aunque CEL es portable, su implementación puede variar ligeramente entre diferentes plataformas.