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

**URL:** https://forum.magentochina.org/t/%E5%90%8E%E5%8F%B0acl%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E5%88%97%E8%A1%A8%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86%E6%95%99%E7%A8%8B/75
**Category:** Magento 2.X
**Tags:** 后端, 开发, acl
**Created:** [2017 年11 月 5 日 12:23 UTC](https://forum.magentochina.org/t/%E5%90%8E%E5%8F%B0acl%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E5%88%97%E8%A1%A8%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86%E6%95%99%E7%A8%8B/75 "2017-11-05T12:23:18Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### 作者： ![Shuai](https://forum.magentochina.org/user_avatar/forum.magentochina.org/shuai/32/3_2.png) [@Shuai](https://forum.magentochina.org/u/Shuai)
#### 发布日期： [2017 年11 月 5 日 12:23 UTC](https://forum.magentochina.org/t/%E5%90%8E%E5%8F%B0acl%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E5%88%97%E8%A1%A8%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86%E6%95%99%E7%A8%8B/75/1 "2017-11-05T12:23:18Z")

</div>

Magento 2后台ACL权限控制使用身份验证系统来创建访问控制列表规则(ACL)，允许商店所有者为其系统中的每个用户创建不同的角色。在本文中，我们将了解它是如何工作的，以及如何为我们的自定义模块添加ACL。  
##Magento 2访问控制列表规则  
Magento 2后台ACL资源在后台 **System \> Permissions \> User Roles** 区域中可见。当我们点击添加新角色按钮或访问角色时，您将看到页面看起来像:

 ![](https://forum.magentochina.org/uploads/default/original/1X/1a6b3f3e53ba8ab497bfd2faa078a45719a1c80c.png)  
在这个资源选项卡中，您可以看到系统中所有可用资源的树列表。您可以选择所有资源或其中一些 **用于此角色** ，并为这个角色选择用户，在角色用户选项卡中。所有属于 **这个角色的用户将限制对您所选择的资源的访问** 。他们 **不能看到和接触到另一个** 。  
##创建后台Admin ACL

- Step 1: 创建ACL规则
- Step 2: 刷新Magento缓存
- Step 3: 检查ACL规则

###创建ACL规则  
现在，我们将了解 **如何将模块添加到ACL角色中** 。我们将使用以前的[简单模块Hello World](https://forum.magentochina.org/t/Magento-2%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E6%A8%A1%E5%9D%97%E6%95%99%E7%A8%8B/38)来做这个。在[管理菜单和系统配置](https://forum.magentochina.org/t/Magento-2-%E5%88%9B%E5%BB%BA%E5%90%8E%E5%8F%B0%E8%8F%9C%E5%8D%95Menu%E6%95%99%E7%A8%8B/61)文章中，您看到在创建时我们总是有一个资源属性(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属性定义了该资源在资源树中的位置。

完成后，请刷新缓存，并查看资源树的结果

 ![](https://forum.magentochina.org/uploads/default/original/1X/f092d8ffc3d969e1c8951430d8f61c55c2491528.png)

###Step 2: 刷新Magento缓存

确保后台菜单项显示正确，你应该尝试[刷新Magento 2缓存](https://doc.magentochina.org/guides/v2.1/config-guide/cli/config-cli-subcommands-cache.html)。

###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，如果你想查看[完整的教程,请点击这里](https://forum.magentochina.org/t/Magento2%E6%A8%A1%E5%9D%97%E5%BC%80%E5%8F%91%E4%B8%AD%E6%96%87%E6%95%99%E7%A8%8B%E7%B4%A2%E5%BC%95/36).译者:西帅  
####如果觉得本站翻译得内容对您有帮助，又没有时间帮助翻译回馈社区.请打赏我们，您的支持是我们的动力:

 ![](https://forum.magentochina.org/uploads/default/original/1X/f67ca4bbe4194f1f961bfaf1a5ffe7ad100960c3.png)
####转载说明:非常欢迎转载，但是必须保证文章的完整性并附上原文地址和翻译原文的地址，保证阅读者不会产生歧义.
