后台ACL访问控制列表[权限管理教程]

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的子元素。每个资源都有一个 IdtitlesortOrder属性:

  • 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,如果你想查看完整的教程,请点击这里.译者:西帅
####如果觉得本站翻译得内容对您有帮助,又没有时间帮助翻译回馈社区.请打赏我们,您的支持是我们的动力:

####转载说明:非常欢迎转载,但是必须保证文章的完整性并附上原文地址和翻译原文的地址,保证阅读者不会产生歧义.