У розділі попередня стаття ми пояснили, як налаштувати та розмежувати права доступу для користувачів адміністративної панелі Magento 2. У цій статті ви дізнаєтеся, як створювати власні правила доступу (Ресурси ролей).
![]()
Вам потрібно створити файл ACL (ACL - Список контролю доступу) у папці Basic модуль :
etc/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="Magento_Backend::content">
<resource id="VendorName_ModuleName::key1" title="Title 1" sortOrder="10">
<resource id="VendorName_ModuleName::key2" title="Title 2" sortOrder="10" />
</resource>
</resource>
<resource id="Magento_Backend::stores">
<resource id="Magento_Backend::stores_settings">
<resource id="Magento_Config::config">
<resource id="VendorName_ModuleName::key3" title="Title 3" />
</resource>
</resource>
</resource>
</resource>
</resources>
</acl>
</config>
Після очищення кешу Magento ви побачите нові елементи на вкладці Ресурси ролей на сторінці редагування Ролі користувачів .
Перші два ресурси (ключ1, ключ2) стосуються елементів меню. Їхня ієрархія може відповідати ієрархії меню. Ці ресурси слід вказати в menu.xml ( ресурс атрибут ) , наприклад:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
<menu>
<add id="VendorName_ModuleName::key1" title="Title 1" module="VendorName_ModuleName" parent="OtherVendorName_OtherModuleName::content" sortOrder="10" resource="VendorName_ModuleName::key1"/>
<add id="VendorName_ModuleName::key2" title="Title 2" module="VendorName_ModuleName" parent="VendorName_ModuleName::key1" sortOrder="10" action="path/controllerName" resource="VendorName_ModuleName::key2"/>
</menu>
</config>
Третій ресурс (key3), доданий для розділу сторінки конфігурації Magento 2 (Stores> Configuration). Примітка: батьківським елементом для key3 є Magento_Config::config . Щоб він працював, його потрібно вказати у файлі system.xml , наприклад:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
<tab id="tab_id" translate="label" sortOrder="110">
<label>My Tab</label>
</tab>
<section id="section_id" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
<class>separator-top</class>
<label>My Section</label>
<tab>tab_id</tab>
<resource>VendorName_ModuleName::key3</resource>
....
Після зміни XML-файлів конфігурації очистіть кеш Magento 2.
Якщо ваш модуль використовує власні контролери панелі адміністратора, встановіть для них права доступу. У класі контролера додайте константу з назвою ключа ACL, наприклад:
const ADMIN_RESOURCE = 'VendorName_ModuleName::key1';
Ви також можете обмежити доступ до деяких блоків адміністративної панелі за допомогою методу \Magento\Framework\Authorization::isAllowed, наприклад:
if ($this->_authorization->isAllowed('VendorName_ModuleName::key1')) {
//є доступ
} else {
//доступ заборонений
}
У прикладах ми створюємо модуль для FAQ. Змінений код модуля можна переглянути на GitHub.