Magento 2.x - Меню не отображается для пользовательской роли в пользовательском модуле


Я работаю с пользовательским модулем Magento 2.x. У меня есть правила ACL для этого, но в нем не отображается меню пользовательского модуля для пользовательских ролей пользователей.

Acl.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
    <acl>
        <resources>
            <resource id="Magento_Backend::admin">
                <resource id="technologymindz::base" title="TM Tag Manager" sortOrder="10" >
                    <resource id="technologymindz_googletagmanager::googletagmanager" title="General Settings" sortOrder="10" />
                </resource>
            </resource>
        </resources>
    </acl>
</config>

Menu.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../Backend/etc/menu.xsd">
    <menu>
        <add id="technologymindz::base" title="TM Tag Manager" module="Technologymindz_GoogleTagManager" sortOrder="10" resource="Technologymindz_GoogleTagManager::sample"/>

        <add id="technologymindz_googletagmanager::googletagmanager" title="General Settings" module="Technologymindz_GoogleTagManager" sortOrder="10" parent="technologymindz::base" action="technologymindz_googletagmanager/items/" resource="Technologymindz_GoogleTagManager::items"/>
    </menu>
</config>

Список меню пользовательского модуля в списке ресурсов и настройки сохранены. enter image description here

Но при входе в систему и проверке пользовательской роли пользователя она не отображается. enter image description here

Контроллер индекса использует разрешение

protected function _isAllowed()
{
 return $this->_authorization->isAllowed('technologymindz::base');
}

Я использовал static content deploy и cache flush

Author: Sohan, 2017-02-02

3 answers

Измените свой acl-код, как показано ниже

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
    <acl>
        <resources>
            <resource id="Magento_Backend::admin">
                <resource id="Technologymindz_GoogleTagManager::sample" title="TM Tag Manager" sortOrder="10" >
                    <resource id="Technologymindz_GoogleTagManager::items" title="General Settings" sortOrder="10" />
                </resource>
            </resource>
        </resources>
    </acl>
</config>
 2
Author: Prashant Valanda, 2017-02-02 08:30:40

Если ваше имя ресурса Technologymindz_GoogleTagManager::items, то вам нужно проверить то же самое в вашем методе _isAllowed()

protected function _isAllowed()
{
    return $this->_authorization->isAllowed('Technologymindz_GoogleTagManager::items');
}

Редактировать: Я также рекомендую установить атрибуты идентификатора и ресурса в menu.xml с теми же значениями Technologymindz_GoogleTagManager::items

 2
Author: Miroslav Petroff, 2017-02-02 08:42:09

Атрибут resource в пунктах меню должен соответствовать атрибуту id из тега ресурса в acl.xml

Ваши идентификаторы ресурсов technologymindz::base и technologymindz_googletagmanager::googletagmanager в acl.xml, но ваш в файле меню, который вы используете technologymindz_googletagmanager::googletagmanager и Technologymindz_GoogleTagManager::items.
Шанс, что те, что в menu.xml, совпадут с теми, что в acl.xml. Также убедитесь, что вы учитываете регистр.

 1
Author: Marius, 2017-02-02 07:32:51