Menu Admin per Menu

Proporciona permisos de administración granulares por menú, permitiendo que los roles gestionen menús específicos sin otorgar acceso completo a la administración de menús.

menu_admin_per_menu
51,774 sites
67
drupal.org

Install

Drupal 12, 11, 10 v8.x-1.7
composer require 'drupal/menu_admin_per_menu:8.x-1.7'
Drupal 9 v8.x-1.5
composer require 'drupal/menu_admin_per_menu:8.x-1.5'
Drupal 8 v8.x-1.4
composer require 'drupal/menu_admin_per_menu:8.x-1.4'

Overview

Por defecto, Drupal solo permite a los usuarios con el permiso global "Administrar menús y elementos de menú" añadir, modificar o eliminar elementos de menú. Esto crea un escenario de todo o nada donde los usuarios tienen control total sobre todos los menús o ningún control en absoluto.

Menu Admin per Menu resuelve esta limitación creando dinámicamente permisos individuales para cada menú en tu sitio Drupal. Por ejemplo, puedes otorgar a un rol permiso para gestionar el menú Principal sin darle acceso al menú de Navegación o al menú de Administración.

El módulo se integra perfectamente con la interfaz de administración de menús existente de Drupal, filtrando automáticamente la página de resumen de menús para mostrar solo los menús que el usuario tiene permiso para administrar. También filtra correctamente la selección del menú padre en los formularios de edición de nodos, asegurando que los usuarios solo puedan colocar contenido en menús a los que tienen acceso.

Este es un módulo de Drupal 7 que extiende el sistema de menús del núcleo de Drupal con capacidades de control de acceso detallado.

Features

  • Crea permisos dinámicos para cada menú (por ejemplo, 'Administrar elementos del menú Principal', 'Administrar elementos del menú de Navegación')
  • Filtra la página de resumen de administración de menús para mostrar solo los menús que el usuario tiene permiso para gestionar
  • Controla el acceso a operaciones individuales de enlaces de menú incluyendo añadir, editar, restablecer y eliminar
  • Filtra automáticamente las opciones de menú padre en formularios de edición de nodos basándose en los permisos de menú del usuario
  • Proporciona un hook alter que permite a otros módulos modificar programáticamente las asignaciones de permisos por menú
  • Almacena en caché las búsquedas de permisos por cuenta de usuario para mejorar el rendimiento
  • Mantiene compatibilidad total con usuarios que tienen el permiso global 'Administrar menús y elementos de menú'

Use Cases

Editor de contenido con acceso limitado a menús

Un sitio web tiene editores de contenido que deberían poder añadir páginas al menú Principal pero no deberían tener acceso para modificar el menú de Administración u otros menús del sistema. Al habilitar este módulo y otorgar el permiso 'Administrar elementos del menú Principal' al rol de Editor de contenido, los editores pueden gestionar elementos del menú Principal mientras están restringidos de otros menús.

Gestión de menús específicos por departamento

Un sitio web de una organización multi-departamental tiene menús separados para cada departamento (menú de RRHH, menú de Ventas, menú de Ingeniería). Cada gerente de departamento necesita gestionar solo el menú de su departamento. Este módulo permite crear un rol para cada departamento con permiso solo para su menú específico.

Restricción de acceso al menú del pie de página

El menú del pie de página contiene enlaces importantes que solo deberían ser modificados por administradores senior. Los administradores regulares pueden gestionar todos los demás menús pero el permiso del menú del pie de página solo se otorga a un rol especial, asegurando que los enlaces críticos estén protegidos.

Control programático de permisos de menú

Un módulo personalizado necesita controlar dinámicamente a qué menús pueden acceder los usuarios basándose en lógica de negocio compleja (por ejemplo, basándose en campos del perfil de usuario o membresía de grupo). Usando hook_menu_admin_per_menu_perm_menus_alter(), el módulo personalizado puede añadir o eliminar acceso a menús programáticamente.

Tips

  • Los usuarios con el permiso global 'Administrar menús y elementos de menú' automáticamente tienen acceso a todos los menús, omitiendo los permisos por menú
  • El módulo almacena en caché las búsquedas de permisos por cuenta de usuario para rendimiento - limpia las cachés después de cambios de permisos
  • Usa el hook hook_menu_admin_per_menu_perm_menus_alter() para escenarios de permisos complejos que no pueden manejarse mediante permisos de rol estándar
  • Cuando un elemento de menú ya existe en un menú al que el usuario no puede acceder, el fieldset del menú se ocultará en el formulario de edición de ese nodo
  • El módulo solo controla el acceso a la administración de menús - no afecta cómo se muestran los menús a los usuarios finales en el frontend

Technical Details

Admin Pages 6
Menús /admin/structure/menu

Página de resumen que lista todos los menús. Cuando es accedida por usuarios sin el permiso global 'administer menu', esta página se filtra para mostrar solo los menús para los cuales el usuario tiene permisos de administración por menú. Cada menú permitido muestra enlaces de operación 'listar enlaces' y 'añadir enlace'.

Gestionar menú /admin/structure/menu/manage/%menu

Ver y gestionar todos los enlaces dentro de un menú específico. El acceso se controla por menú - los usuarios necesitan el permiso global 'administer menu' o el permiso específico 'Administrar elementos del menú [nombre del menú]'.

Añadir enlace de menú /admin/structure/menu/manage/%menu/add

Añadir un nuevo enlace a un menú específico. El desplegable del menú padre se filtra para mostrar solo los menús y elementos que el usuario tiene permiso para gestionar.

Editar enlace de menú /admin/structure/menu/item/%menu_link/edit

Editar un enlace de menú existente. El acceso se controla según el menú al que pertenece el enlace. El desplegable del menú padre se filtra según los permisos del usuario.

Eliminar enlace de menú /admin/structure/menu/item/%menu_link/delete

Eliminar un enlace de menú. El acceso requiere permiso para el menú que contiene el enlace.

Restablecer enlace de menú /admin/structure/menu/item/%menu_link/reset

Restablecer un enlace de menú a su configuración predeterminada. El acceso requiere permiso para el menú que contiene el enlace.

Permissions 1
Administrar elementos del menú [Nombre del menú]

Generado dinámicamente para cada menú en el sistema. Por ejemplo, 'administer main-menu menu items' para el menú Principal. Otorga permiso para añadir, editar, eliminar y reordenar enlaces en ese menú específico. Los usuarios con este permiso verán el menú en la página de resumen y pueden seleccionarlo como padre al editar contenido.

Hooks 1
hook_menu_admin_per_menu_perm_menus_alter

Permite a los módulos alterar el array de menús para los cuales un usuario tiene permisos de administración por menú. Este hook se invoca después de que el módulo ha determinado a qué menús puede acceder el usuario según sus permisos.

Troubleshooting 4
El usuario no puede ver ningún menú después de habilitar el módulo

El módulo no otorga automáticamente ningún permiso. Navega a admin/people/permissions y asigna los permisos apropiados 'Administrar elementos del menú [nombre del menú]' a los roles relevantes.

El usuario con permiso por menú no puede colocar contenido en el menú

Asegúrate de que el rol del usuario tenga el permiso 'Administrar elementos del menú [nombre del menú]' para el menú específico donde quieren colocar contenido. El permiso afecta tanto a las páginas de administración de menús como a la selección de menú en los formularios de edición de nodos.

Los cambios en hook_menu_admin_per_menu_perm_menus_alter no están teniendo efecto

Limpia la caché de Drupal ya que las búsquedas de permisos están cacheadas por usuario. Usa drush cc all o navega a admin/config/development/performance y limpia las cachés.

El usuario aún puede ver menús a los que no debería tener acceso

Verifica que el usuario no tenga el permiso global 'Administrar menús y elementos de menú', el cual sobrescribe los permisos por menú y otorga acceso a todos los menús.

Security Notes 4
  • El módulo incluye caché de permisos apropiado por cuenta de usuario para prevenir filtraciones de permisos entre usuarios
  • Todas las verificaciones de acceso recurren apropiadamente al permiso global 'administer menu' para usuarios que lo tienen
  • El hook alter permite control programático pero debe implementarse cuidadosamente para evitar otorgar acceso no intencionado accidentalmente
  • Este módulo tiene cobertura oficial de avisos de seguridad de Drupal, lo que significa que los problemas de seguridad son revisados y abordados por el Equipo de Seguridad de Drupal