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
12,416 sites
40
drupal.org

Install

Drupal 11, 10 v8.x-2.4
composer require 'drupal/menu_item_role_access:8.x-2.4'
Drupal 9, 8 v8.x-2.1
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 , y , y escenarios donde la visibilidad del menú debe controlarse independientemente del acceso a la página.

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
Configuración del módulo Menu Item Role Access /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
Editar el campo Menu Item Role Access

Permite a los usuarios editar el campo 'Menu Item Roles' al crear o editar elementos de contenido de enlace de menú. Sin este permiso, los usuarios no verán el campo de selección de roles en los formularios de edición de elementos de menú, incluso si tienen el permiso 'administer menu'.

Administrar configuración de Menu Item Role Access

Otorga acceso a la página de configuración del módulo en /admin/config/menu-item-role-access. Los usuarios con este permiso pueden modificar la configuración global de cómo funciona la verificación de acceso basada en roles.

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
El usuario ve el elemento de menú pero su rol no está permitido para este elemento de menú

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 usuario no ve el elemento de menú pero su rol está permitido

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.

La característica de sobrescribir hijos no funciona

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 campo Menu Item Roles no aparece en el formulario de edición del elemento de menú

El usuario actual necesita el permiso 'Edit The Menu Item Role Access Field'. Otorgue este permiso en /admin/people/permissions a los roles apropiados.

Los cambios en las asignaciones de roles no se reflejan inmediatamente

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ú