Este ejemplo implementa un DSL para el lenguaje de filtrado SCIM (System for Cross-domain Identity Management) versión 2.0.
SCIM (RFC 7644) es un estándar para automatizar el intercambio de información de identidad de usuario entre sistemas. El filtrado SCIM permite consultas complejas sobre recursos de usuario utilizando una sintaxis específica.
eq(equal) - Igualdadne(not equal) - Desigualdadco(contains) - Contienesw(starts with) - Comienza conew(ends with) - Termina congt(greater than) - Mayor quege(greater than or equal) - Mayor o iguallt(less than) - Menor quele(less than or equal) - Menor o igualpr(present) - Presente (not null)
and- Y lógicoor- O lógiconot- Negación
- Paréntesis para agrupar expresiones
# Usuarios con nombre "John"
userName eq "john"
# Usuarios que contienen "example" en su email
emails[type eq "work" and value co "example.com"]
# Usuarios activos con departamento específico
active eq true and department eq "Engineering"
# Usuarios creados después de cierta fecha
meta.created gt "2023-01-01T00:00:00Z"
# Filtros complejos con agrupación
(userName sw "test" or email co "test") and active eq trueEl ejemplo utiliza la misma arquitectura que otros ejemplos del proyecto:
- main.go: Punto de entrada con datos de ejemplo y casos de prueba
- universal/: Contiene la implementación reutilizable
- scim_dsl.go: Definición del DSL SCIM
- scim_engine.go: Motor de filtrado con funciones inyectables
El motor permite inyectar funciones personalizadas para diferentes implementaciones:
type DataProvider interface {
// Obtener todos los usuarios
GetUsers() ([]interface{}, error)
// Filtrar usuarios por criterio específico
FilterUsers(attribute, operator, value string) ([]interface{}, error)
// Aplicar operadores lógicos
ApplyLogicalOperator(operator string, left, right []interface{}) ([]interface{}, error)
}cd examples/scim
go run main.go- Sincronización de Directorios: Integración entre Active Directory y sistemas cloud
- Provisioning Automático: Creación/actualización automática de usuarios
- Sistemas de Identity Management: Okta, Azure AD, Auth0
- APIs de Usuario: Filtrado avanzado en endpoints REST
- Auditoría y Compliance: Consultas complejas sobre datos de usuario
- Soporte para filtros de grupos y roles
- Validación de esquemas SCIM
- Cache inteligente de consultas
- Optimización de índices automática
- Integración con bases de datos reales