Menu Item Role Access
Proporciona control de acceso basado en roles para elementos de menú, permitiendo a los administradores restringir la visibilidad de elementos de menú según los roles de usuario.
menu_item_role_access
Install
composer require 'drupal/menu_item_role_access:8.x-2.4'
composer require 'drupal/menu_item_role_access:8.x-2.1'
Overview
Menu Item Role Access es un módulo de Drupal que añade control de acceso granular basado en roles a los elementos de menú. Por defecto, el sistema de menús de Drupal muestra u oculta elementos de menú según si el usuario tiene acceso a la página destino del enlace. Este módulo extiende esa funcionalidad añadiendo un campo de selección de roles directamente a los elementos de menú, permitiendo a los administradores controlar qué roles de usuario pueden ver elementos de menú específicos independientemente del acceso a la página subyacente.
El módulo añade dos campos a las entidades de contenido de enlace de menú: un campo de referencia a roles con múltiples valores que especifica qué roles pueden ver el elemento de menú, y un campo booleano que permite a los elementos de menú padre sobrescribir la configuración de acceso para todos sus hijos. Esta característica de herencia jerárquica es particularmente útil para gestionar estructuras de menú complejas donde ramas enteras deben restringirse a ciertos grupos de usuarios.
El módulo proporciona opciones de configuración para sobrescribir el comportamiento predeterminado de verificación de acceso al destino de enlaces internos de Drupal, permitiendo que los elementos de menú se muestren a usuarios que tienen la asignación de rol apropiada incluso si no tienen acceso directo a la página destino. Esto es especialmente útil para enlaces externos, rutas especiales como
Features
- Control de visibilidad basado en roles para elementos de menú individuales permitiendo la selección de múltiples roles de usuario
- Herencia de acceso de padre a hijos con la opción 'Sobrescribir hijos' que propaga las restricciones de roles hacia abajo en la jerarquía del menú
- Comportamiento configurable para sobrescribir la verificación de acceso al destino de enlaces internos de Drupal, permitiendo que los elementos de menú se muestren basándose únicamente en la asignación de roles
- Soporte para tipos de rutas especiales incluyendo enlaces <nolink>, <none> y página <front>
- Caché automático con contexto de caché user.roles para una invalidación de caché adecuada
- Control de acceso a nivel de campo asegurando que solo usuarios con los permisos apropiados puedan editar asignaciones de roles
- Integración completa con el sistema de entidades menu_link_content de Drupal a través de definiciones de campos base
Use Cases
Sección de navegación solo para miembros
Cree una sección de menú visible solo para miembros autenticados. Añada elementos de menú a un menú de Miembros y seleccione solo el rol 'authenticated' en el campo Menu Item Roles. Los visitantes anónimos no verán estos elementos de menú incluso si pueden acceder a las páginas destino.
Enlaces de panel de control específicos por rol
Muestre diferentes enlaces de panel de control a diferentes roles de usuario. Cree elementos de menú separados para 'Panel de Editor', 'Panel de Gerente' y 'Panel de Administrador', cada uno restringido a sus respectivos roles. Todos los elementos pueden existir en el mismo menú pero solo aparecerán para usuarios con roles coincidentes.
Menús jerárquicos de departamento
Cree una estructura de menú específica para departamentos donde una rama entera esté restringida. Configure un elemento de menú padre 'Departamento de Finanzas' restringido al rol 'finance_staff' con 'Sobrescribir hijos' habilitado. Todos los elementos hijos (Informes, Presupuestos, Facturas) heredarán automáticamente la restricción sin necesidad de configuración individual.
Control de visibilidad de enlaces externos
Controle la visibilidad de enlaces externos basándose en roles. Añada enlaces externos (ej., a portales de socios o recursos premium) y restrínjalos a niveles de suscripción o membresía específicos usando asignación de roles.
Encabezados de menú sin enlace para audiencias específicas
Cree encabezados de sección usando rutas <nolink> que solo sean visibles para ciertos roles. Por ejemplo, un encabezado 'Características Premium' que solo aparece para suscriptores premium, con sus hijos también restringidos apropiadamente.
Elementos de menú solo para anónimos
Muestre ciertos elementos de menú solo a usuarios anónimos (no conectados), como enlaces de 'Registrarse' o 'Iniciar sesión'. Asigne solo el rol 'anonymous' a estos elementos para que desaparezcan automáticamente una vez que el usuario inicie sesión.
Tips
- Siempre limpie las cachés después de cambiar la configuración del módulo para que los cambios tengan efecto
- Use la característica 'Sobrescribir hijos' para simplificar la gestión de jerarquías de menú grandes - establezca restricciones en elementos padre en lugar de configurar cada hijo individualmente
- Para enlaces externos o rutas especiales (<nolink>, <none>, <front>), habilite 'Sobrescribir verificación de acceso al destino de enlace interno' para asegurar que las restricciones basadas en roles funcionen correctamente
- Cuando no se seleccionan roles en un elemento de menú, permanece visible para todos los usuarios (comportamiento predeterminado de Drupal)
- El módulo añade contextos de caché para user.roles, asegurando un manejo de caché adecuado para visibilidad basada en roles
- Pruebe la visibilidad del menú iniciando sesión como diferentes roles de usuario o usando un módulo de cambio de roles para verificar que la configuración de acceso funciona como se espera
Technical Details
Admin Pages 1
/admin/config/menu-item-role-access
Esta página de configuración permite a los administradores controlar el comportamiento global del módulo Menu Item Role Access. Proporciona opciones para modificar cómo el módulo interactúa con el sistema de verificación de acceso predeterminado de Drupal y si los elementos de menú hijos deben heredar las restricciones de acceso de sus padres.
Permissions 2
Hooks 4
hook_entity_base_field_info
Añade dos campos base al tipo de entidad menu_link_content: 'menu_item_roles' (referencia de entidad a user_role con cardinalidad ilimitada) y 'menu_item_override_children' (campo booleano para control de herencia).
hook_form_menu_link_content_form_alter
Modifica el formulario de contenido de enlace de menú para ocultar condicionalmente el campo 'menu_item_override_children' según si la opción de configuración 'inherit_parent_access' está habilitada.
hook_entity_field_access
Controla el acceso al campo 'menu_item_roles', asegurando que solo usuarios con el permiso 'edit menu_item_role_access' puedan editar el campo. El acceso de visualización está prohibido para prevenir divulgación de información, mientras que el acceso de edición requiere el permiso específico.
hook_help
Proporciona texto de ayuda para la página de ayuda del módulo explicando que el módulo añade un campo opcional de roles a los elementos de menú para control de acceso.
Troubleshooting 5
Por defecto, los permisos del core de Drupal en /admin/people/permissions tienen precedencia. Si un rol tiene permisos de visualización para el contenido destino, pueden ver el elemento de menú independientemente de la configuración de Menu Item Role Access. Navegue a /admin/config/menu-item-role-access y habilite 'Sobrescribir verificación de acceso al destino de enlace interno', luego limpie la caché.
El rol del usuario puede carecer de permisos del core de Drupal para ver el contenido destino. Otorgue los permisos del core necesarios o habilite 'Sobrescribir verificación de acceso al destino de enlace interno' en /admin/config/menu-item-role-access para omitir la verificación de acceso al destino.
Asegúrese de que 'Permitir que los padres sobrescriban a los hijos' esté habilitado en /admin/config/menu-item-role-access. También verifique que el elemento de menú padre tenga la casilla 'Sobrescribir hijos' habilitada en su formulario de edición. Para mejores resultados, también habilite 'Sobrescribir verificación de acceso al destino de enlace interno'.
El usuario actual necesita el permiso 'Edit The Menu Item Role Access Field'. Otorgue este permiso en /admin/people/permissions a los roles apropiados.
Limpie todas las cachés usando drush cr o a través de /admin/config/development/performance. El módulo usa contextos de caché que pueden requerir una reconstrucción completa de caché para tener efecto.
Security Notes 4
- Este módulo controla solo la visibilidad de elementos de menú - no proporciona control de acceso a las páginas reales. Los usuarios aún pueden acceder a páginas restringidas directamente vía URL si tienen los permisos necesarios a nivel de página
- La opción 'Sobrescribir verificación de acceso al destino de enlace interno' debe usarse con cuidado ya que puede hacer visibles elementos de menú para páginas a las que los usuarios realmente no pueden acceder, potencialmente revelando la estructura del sitio
- Las asignaciones de roles en elementos de menú se almacenan como referencias de entidad y requieren el permiso 'edit menu_item_role_access' para modificarse, previniendo cambios no autorizados en la configuración de visibilidad
- El módulo respeta el permiso 'link to any page' de Drupal - los usuarios con este permiso omiten todas las verificaciones de rol en elementos de menú