Rules
Un motor de reglas de negocio que permite a los administradores del sitio definir acciones ejecutadas condicionalmente basadas en eventos que ocurren (reglas ECA).
rules
Install
composer require 'drupal/rules:^4.0'
Overview
El módulo Rules proporciona un marco potente y flexible para automatizar acciones en tu sitio Drupal basándose en eventos que ocurren. Usando un patrón Evento-Condición-Acción (ECA), los administradores del sitio pueden crear lógica de negocio sofisticada sin escribir código.
Rules opera a través de dos conceptos principales: Reglas de Reacción que se activan automáticamente cuando ocurren eventos específicos (como guardar contenido, inicio de sesión de usuario o ejecuciones de cron), y Componentes que son conjuntos de reglas reutilizables que pueden ser llamados desde otras reglas o invocados programáticamente.
El módulo proporciona un extenso sistema de plugins con numerosos eventos integrados (CRUD de Entity, acciones de usuario, eventos del sistema), condiciones (comparación de datos, verificaciones de Entity, verificación de roles de usuario) y acciones (enviar correo electrónico, modificar Entities, mostrar mensajes, redirigir páginas). Los desarrolladores pueden extender estos con plugins personalizados.
Rules cuenta con un sofisticado sistema de contexto y selección de datos usando datos tipados, permitiendo manipulación compleja de datos a través de selectores como 'node.uid.entity.name.value'. El módulo incluye capacidades completas de depuración con registro en pantalla e integración con el registro del sistema.
Features
- Automatización basada en eventos con reglas de reacción que se activan en eventos de Drupal (guardar Entity, eliminar, inicio/cierre de sesión de usuario, cron, vista de página)
- Lógica condicional con contenedores AND/OR, soporte de negación y condiciones anidadas complejas
- Extensa biblioteca de acciones incluyendo envío de correo electrónico, operaciones CRUD de Entity, gestión de usuarios, redirecciones de página y mensajes del sistema
- Componentes de reglas reutilizables que pueden ser invocados desde otras reglas o programáticamente
- Sistema de selector de datos para acceder y manipular datos anidados de Entity usando rutas de datos tipados
- Proveedores de contexto integrados para fecha actual, ruta actual e información del sitio
- Registro de depuración con verbosidad configurable e integración opcional con el registro del sistema
- Funcionalidad de importación/exportación para reglas mediante gestión de configuración
- Comandos de Drush para gestionar reglas desde la línea de comandos
- Filtrado de eventos específico por Bundle para eventos de Entity
- Arquitectura de plugins extensible para eventos, condiciones y acciones personalizadas
- Funcionalidad de auto-guardado que agrupa guardados de Entity para mejor rendimiento
Use Cases
Enviar correo de bienvenida al registrarse un usuario
Crea una reaction rule activada por 'After saving a new entity' filtrada a entidades User. Añade una acción 'Send email' con el correo del nuevo usuario en el campo 'To', un asunto de bienvenida y un mensaje personalizado usando tokens como [user:display-name].
Notificar a administradores cuando se publica contenido
Crea una reaction rule activada por 'After updating an entity' para entidades Node. Añade una condición 'Node is published' y opcionalmente filtra por tipo de contenido. Añade la acción 'Send email to users of role' dirigida al rol 'administrator'.
Asignación automática de rol de usuario basada en campo de perfil
Crea una reaction rule para 'After updating an entity' en entidades User. Añade una condición que verifique el valor de un campo de perfil (por ejemplo, estado de verificación). Añade la acción 'Add user role' para otorgar el rol apropiado cuando se cumplan las condiciones.
Redirigir usuarios después del inicio de sesión según su rol
Crea una reaction rule activada por 'User has logged in'. Añade condiciones que verifiquen 'User has role' para diferentes roles. Usa la acción 'Page redirect' para enviar a los administradores al panel de control y a los usuarios regulares a su perfil.
Despublicar contenido que contiene palabras clave específicas
Crea una reaction rule para 'Before saving an entity' en entidades Node. Añade una condición 'Text comparison' que verifique si el campo body contiene palabras prohibidas. Añade la acción 'Unpublish content' y 'Show message' para notificar al autor.
Acciones programadas de contenido mediante cron
Crea una reaction rule activada por 'Cron maintenance tasks are performed'. Usa 'Fetch entities by field' para encontrar contenido que coincida con criterios (por ejemplo, fecha expirada). Recorre los resultados y realiza acciones como despublicar o enviar notificaciones.
Crear componente de notificación reutilizable
Crea un Rules component que acepte un usuario y un mensaje como contexto. Configura acciones para enviar correo electrónico y mostrar mensaje en pantalla. Referencia este componente desde múltiples reaction rules para mantener un comportamiento de notificación consistente.
Bloquear direcciones IP después de intentos fallidos de inicio de sesión
Crea una reaction rule activada por 'System log entry is created'. Añade una condición que verifique el mensaje de registro en busca de patrones de inicio de sesión fallido. Usa la acción 'Ban IP address' (requiere el módulo Ban) para bloquear a los infractores reincidentes.
Tips
- Comienza con el registro de depuración habilitado cuando desarrolles nuevas reglas para entender el flujo de ejecución
- Usa los comandos de Drush para listar rápidamente los eventos, condiciones y acciones disponibles
- Crea componentes reutilizables para secuencias de acciones comunes para mantener la consistencia
- Usa eventos específicos de bundle (por ejemplo, 'After saving a node of type Article') para mejor rendimiento que filtrar con condiciones
- El autocompletado del selector de datos es invaluable - presiona Tab para explorar las rutas disponibles
- Considera el orden de las condiciones: coloca primero las condiciones rápidas de evaluar para cortocircuitar verificaciones costosas
- Usa 'Force saving immediately' con moderación - los guardados por lotes al final de la regla son más eficientes
- Exporta reglas mediante Configuration Management para versionar tu lógica de negocio
- Prueba las reglas exhaustivamente en un entorno de desarrollo antes de desplegar a producción
Technical Details
Admin Pages 5
/admin/config/workflow/rules
Lista todas las reglas de reacción configuradas con sus eventos asociados, estado (habilitado/deshabilitado), y proporciona operaciones para agregar, editar, eliminar, habilitar o deshabilitar reglas. Incluye enlaces rápidos para importar y exportar reglas a través de la gestión de configuración.
/admin/config/workflow/rules/components
Lista todos los componentes de reglas reutilizables. Los componentes son conjuntos de reglas que pueden invocarse desde otras reglas o llamarse programáticamente. Pueden definir requisitos de contexto de entrada y proporcionar contexto de salida.
/admin/config/workflow/rules/settings
Configurar ajustes globales para el módulo Rules incluyendo el nivel de detalle del registro del sistema y opciones de registro de depuración para desarrollo.
/admin/config/workflow/rules/reactions/add
Formulario para crear una nueva regla de reacción. Requiere seleccionar al menos un evento activador.
/admin/config/workflow/rules/reactions/edit/{rules_reaction_rule}
Interfaz completa de edición de reglas con gestión de eventos, construcción de condiciones con lógica AND/OR, y configuración de acciones. Soporta condiciones anidadas y múltiples acciones con ordenamiento mediante arrastrar y soltar.
Permissions 5
Hooks 3
hook_rules_action_info_alter
Modifica la definición de los plugins de acción de Rules.
hook_rules_condition_info_alter
Modifica la definición de los plugins de condición de Rules.
hook_rules_event_info_alter
Modifica la definición de los plugins de evento de Rules.
Drush Commands 10
drush rules:list
Lista todas las reglas activas e inactivas de tu sitio. Puede filtrar por tipo.
drush rules:enable
Habilita una Reaction Rule deshabilitada.
drush rules:disable
Deshabilita una Reaction Rule habilitada.
drush rules:delete
Elimina permanentemente una regla o componente.
drush rules:export
Exporta una configuración de regla individual en formato YAML.
drush rules:revert
Revierte una regla a su estado original proporcionado por el módulo.
drush rules:events
Muestra una lista de todos los eventos de Rules disponibles agrupados por categoría.
drush rules:conditions
Muestra una lista de todas las condiciones de Rules disponibles agrupadas por categoría.
drush rules:actions
Muestra una lista de todas las acciones de Rules disponibles agrupadas por categoría.
drush rules:expressions
Muestra una lista de todos los tipos de expresiones de Rules disponibles.
Troubleshooting 6
Habilita el registro de depuración en /admin/config/workflow/rules/settings y revisa la salida de depuración. Verifica que la regla esté habilitada, que el evento esté configurado correctamente y que todas las condiciones se cumplan. Revisa el registro del sistema en busca de mensajes de error.
Verifica que el sistema de correo de tu sitio esté configurado correctamente. Revisa el registro del sistema en busca de errores de correo. Asegúrate de que el campo 'To' contenga direcciones de correo válidas. Prueba con el módulo Contact del núcleo para verificar que el correo funciona.
Usa la función de autocompletado en el campo del selector de datos para explorar las rutas de datos disponibles. Asegúrate de que el contexto proporcione el tipo de entidad esperado. Verifica que los campos existan en el bundle de entidad con el que estás trabajando.
Habilita el registro de depuración para ver los resultados de evaluación de condiciones. Verifica que el selector de datos devuelva los valores esperados. Busca discrepancias de tipo (comparaciones de string vs integer). Prueba con condiciones negadas para verificar la evaluación.
Usa eventos específicos de bundle en lugar de eventos genéricos de entidad. Combina reglas similares donde sea posible. Evita operaciones costosas en eventos que se activan frecuentemente. Considera usar reglas activadas por cron para tareas que no son críticas en tiempo.
Usa Configuration Management o el comando de exportación de Drush. Asegúrate de que todas las configuraciones dependientes (entidades referenciadas, etc.) también se exporten. Verifica los permisos de archivos en el directorio de sincronización de configuración.
Security Notes 6
- El permiso 'Bypass Rules access control' está restringido y solo debe otorgarse a administradores altamente confiables
- Las acciones de correo electrónico pueden usarse para spam si las reglas no están aseguradas adecuadamente - limita los permisos de administración de reglas
- Las acciones de redirección de página podrían usarse para phishing - revisa cuidadosamente las reglas de redirección
- Las acciones de establecimiento de datos pueden modificar cualquier dato de entidad - audita las reglas que usan esta acción
- Las reglas que se ejecutan en eventos activados por usuarios pueden ser explotadas para denegación de servicio si no tienen límite de tasa
- Siempre verifica que el módulo PHP filter esté deshabilitado si existe - nunca uses código PHP en Rules