Magento 2后台ACL权限控制使用身份验证系统来创建访问控制列表规则(ACL),允许商店所有者为其系统中的每个用户创建不同的角色。在本文中,我们将了解它是如何工作的,以及如何为我们的自定义模块添加ACL。
##Magento 2访问控制列表规则
Magento 2后台ACL资源在后台 System > Permissions > User Roles 区域中可见。当我们点击添加新角色按钮或访问角色时,您将看到页面看起来像:
在这个资源选项卡中,您可以看到系统中所有可用资源的树列表。您可以选择所有资源或其中一些 用于此角色,并为这个角色选择用户,在角色用户选项卡中。所有属于 这个角色的用户将限制对您所选择的资源的访问。他们 不能看到和接触到另一个。
##创建后台Admin ACL
- Step 1: 创建ACL规则
- Step 2: 刷新Magento缓存
- Step 3: 检查ACL规则
###创建ACL规则
现在,我们将了解 如何将模块添加到ACL角色中。我们将使用以前的简单模块Hello World来做这个。在管理菜单和系统配置文章中,您看到在创建时我们总是有一个资源属性(resource)。现在我们将把资源注册到系统中,因此Magento可以实现并让我们为他们设置一个角色。要注册资源,我们使用 acl.xml文件,它位于 {module_root}/etc/acl.xml中。让我们为我们的简单模块创建这个文件:
文件:
app/code/Magentochina/HelloWorld/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="Magentochina_HelloWorld::helloworld" title="Hello World" sortOrder="51">
<resource id="Magentochina_HelloWorld::post" title="Posts" sortOrder="10"/>
<resource id="Magentochina_HelloWorld::helloworld_configuration" title="Configuration" sortOrder="99" />
</resource>
<resource id="Magento_Backend::stores">
<resource id="Magento_Backend::stores_settings">
<resource id="Magento_Config::config">
<resource id="Magentochina_HelloWorld::helloworld_config" title="Hello World"/>
</resource>
</resource>
</resource>
</resource>
</resources>
</acl>
</config>
我们的资源将被设置为 Magento_Backend::admin的子元素。每个资源都有一个 Id、title 和 sortOrder属性:
- Id属性是该资源的标识。您可以在管理菜单中定义资源、配置和限制对模块控制器的访问时使用它。这是一个惟一的字符串,应该以这种格式:Vendor_ModuleName::resource_name。
- Title属性是资源树中显示的资源的标签。
- sortOrder属性定义了该资源在资源树中的位置。
完成后,请刷新缓存,并查看资源树的结果
###Step 2: 刷新Magento缓存
确保后台菜单项显示正确,你应该尝试刷新Magento 2缓存。
###Step 3: 检查ACL规则
有一些地方,我们需要限制访问:
后台菜单:如果没有管理员的允许,将ACL资源隐藏在菜单中。
文件:
app/code/Magentochina/HelloWorld/etc/adminhtml/menu.xml
<add id="Magentochina_HelloWorld::helloworld" title="Hello World" module="Magentochina_HelloWorld" sortOrder="51" resource="Magentochina_HelloWorld::helloworld"/>
系统配置:将ACL资源设置为限制对该页面的访问。
文件:
app/code/Magentochina/HelloWorld/etc/adminhtml/system.xml
<section id="helloworld" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
….
<resource>Magentochina_HelloWorld::helloworld_configuration</resource>
….
</section>
后台控制器:Magento提供了一个抽象类型的 Magento\Framework\AuthorizationInterface,您可以使用它来验证当前登录用户的特定ACL。您可以使用该变量调用该对象: $this->_authorization 。在控制器中,您必须编写protected方法来检查资源:
文件:
vendor/magento/module-customer/Controller/Adminhtml/Index.php
protected function _isAllowed()
{
return $this->_authorization->isAllowed('Magento_Customer::manage');
}
####本教程翻译自mageplaza,如果你想查看完整的教程,请点击这里.译者:西帅
####如果觉得本站翻译得内容对您有帮助,又没有时间帮助翻译回馈社区.请打赏我们,您的支持是我们的动力: