template data create blocks magento menu admin acl

data - magento 2 blocks



El usuario con un rol personalizado no puede acceder al elemento de menú personalizado en la interfaz de administración de Magento (2)

Hay demasiados factores en juego para decirlo con certeza: la resolución más rápida será depurarlo usted mismo.

Eche un vistazo a _buildMenuArray'' in aplicación / code / core / Mage / Adminhtml / Block / Page / Menu.php`. En algún lugar allí deberías ver un bucle foreach que comienza algo como esto

foreach ($parent->children() as $childName => $child) { if (1 == $child->disabled) { continue; } $aclResource = ''admin/'' . ($child->resource ? (string)$child->resource : $path . $childName); if (!$this->_checkAcl($aclResource)) { continue; } if ($child->depends && !$this->_checkDepends($child->depends)) { continue; }

Este es el ciclo que crea la matriz de información de menú para el bloque que crea la navegación de administrador. Si se desencadena cualquiera de esas cláusulas de continue protección, Magento omitirá la representación del menú en particular. Le sugerí que verificara por qué _checkAcl método _checkAcl para este menú en particular. Mi suposición (basada en un destello de tu publicación) es que te faltan roles de ACL para los menús secundarios que no están renderizando.

¡Buena suerte!

Definí un elemento de menú personalizado para la interfaz de administración de Magento con varios elementos secundarios.

Esto funciona bastante bien como se espera cuando un usuario con una función de administrador inicia sesión en la interfaz de administración. El administrador ve todos los elementos secundarios y también puede acceder a las páginas a las que se vinculan los elementos. Cada una de estas páginas muestra el contenido de una tabla de base de datos en una grilla.

Pero los problemas ocurren cuando intento usar un rol personalizado. La función personalizada tiene acceso al elemento de menú y sus elementos secundarios. Ahora, cuando inicio sesión en la interfaz de administrador con un usuario con esta función personalizada, el usuario ve todos los elementos del menú como se esperaba, pero para dos elementos secundarios, el usuario obtiene un mensaje de acceso denegado cuando hace clic en el elemento secundario.

Aquí está la entrada de acl y menú de config.xml.

... <adminhtml> <acl> <resources> <admin> <children> <deliveryservice translate="title"> <title>Deliveryservice</title> <sort_order>300</sort_order> <children> <holiday translate="title" module="deliveryservice"> <title>Holidays</title> <sort_order>5</sort_order> </holiday> <holidayset translate="title" module="deliveryservice"> <title>Holidaysets</title> <sort_order>10</sort_order> </holidayset> <openinghour translate="title" module="deliveryservice"> <title>Openinghours</title> <sort_order>20</sort_order> </openinghour> <delivery_address translate="title" module="deliveryservice"> <title>Delivery Areas</title> <sort_order>30</sort_order> </delivery_address> <minimum_order_value translate="title" module="deliveryservice"> <title>Minimum order value</title> <sort_order>40</sort_order> </minimum_order_value> <key_value_store translate="title" module="deliveryservice"> <title>Key Value Store</title> <sort_order>50</sort_order> </key_value_store> <ratings translate="title" module="deliveryservice"> <title>Bewertungen</title> <sort_order>60</sort_order> </ratings> </children> </deliveryservice> </children> </admin> </resources> </acl> <menu> <deliveryservice translate="title"> <title>Deliveryservice</title> <sort_order>300</sort_order> <children> <holiday translate="title" module="deliveryservice"> <title>Holidays</title> <sort_order>5</sort_order> <action>adminhtml/holiday/</action> </holiday> <holidayset translate="title" module="deliveryservice"> <title>Holidaysets</title> <sort_order>10</sort_order> <action>adminhtml/holidayset/</action> </holidayset> <openinghour translate="title" module="deliveryservice"> <title>Openinghours</title> <sort_order>20</sort_order> <action>adminhtml/openinghour/</action> </openinghour> <delivery_address translate="title" module="deliveryservice"> <title>Delivery Areas</title> <sort_order>30</sort_order> <action>adminhtml/deliveryaddress/</action> </delivery_address> <minimum_order_value translate="title" module="deliveryservice"> <title>Minimum Order Values</title> <sort_order>40</sort_order> <action>adminhtml/minimumordervalue/</action> </minimum_order_value> <key_value_store translate="title" module="deliveryservice"> <title>Key Value Store</title> <sort_order>50</sort_order> <action>adminhtml/keyvaluestore/</action> </key_value_store> <ratings translate="title" module="deliveryservice"> <title>Bewertungen</title> <sort_order>60</sort_order> <action>adminhtml/ratings/</action> </ratings> </children> </deliveryservice> </menu> </adminhtml> ...

El problema se produce para los elementos del menú minimum_order_value y key_value_store.

No entiendo por qué un administrador puede acceder a todas las páginas, pero un rol diferente no puede. Alguna idea de lo que podría ser el problema aquí?


Ok, resolví el problema.

Se relacionó con las clases de controlador asociadas con los elementos del submenú y el nombre de la etiqueta de los elementos del submenú.

Cada controlador tiene un método _isAllowed() para verificar el permiso del usuario para ver una página.

P.ej

protected function _isAllowed(){ return Mage::getSingleton(''admin/session'')->isAllowed(''deliveryservice/holidayset''); }

En este método, la última parte del parámetro (detrás de la barra inclinada) utilizada para llamar al método isAllowed () debe ser igual al nombre de la etiqueta del elemento del menú secundario para las entradas de menú y acl en config.xml.

Entonces, para este ejemplo, el nombre de la etiqueta del submenú debe ser <holidayset ...

Para dos de mis controladores, el nombre de la etiqueta y el parámetro no eran iguales.