Magento 2管理ACL访问控制列表

Magento 2管理ACL面板使用身份验证系统和强大的系统来创建访问控制列表规则(ACL),允许商店所有者为其系统中的每个用户创建细粒度角色。在本文中,我们将了解它是如何工作的以及如何为我们的自定义模块添加ACL。

Magento 2访问控制列表规则

Magento的2管理员ACL资源Magento的2管理下的可见System > Permissions > User Roles区域。当我们单击“ 添加新角色”按钮或访问角色时,您将看到该页面如下所示:

在此资源选项卡中,您可以看到系统中所有可用资源的树状列表。您可以为此角色选择所有资源或其中一些资源,并在“角色用户”选项卡中选择此角色的用户。属于此角色的所有用户都将限制对您选择的资源的访问权限。他们无法看到和访问其他人。

创建管理员管理ACL

  • 第1步:创建ACL规则
  • 第2步:刷新Magento缓存
  • 第3步:检查ACL规则

第1步:创建ACL规则

现在,我们将看到如何将我们的模块添加到ACL角色。我们将使用之前的简单模块HelloWorld来执行此操作。与“ 管理员菜单”和“ 系统配置”一文中一样,您看到我们在创建时总是拥有资源属性。现在我们将这些资源注册到系统中,因此Magento可以实现并让我们为它们设置一个角色。要注册资源,我们使用位于的acl.xml文件app/code/{namespace}/{module}/etc/acl.xml。让我们为简单的模块创建这个文件:

文件: app/code/Mageplaza/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="Mageplaza_HelloWorld::helloworld" title="Hello World" sortOrder="51">
                    <resource id="Mageplaza_HelloWorld::post" title="Posts" sortOrder="10"/>
                    <resource id="Mageplaza_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="Mageplaza_HelloWorld::helloworld_config" title="Hello World"/>
                        </resource>
                    </resource>
                </resource>
            </resource>
        </resources>
    </acl>
</config>

我们的资源将作为孩子Magento_Backend::admin。每个资源都有一个Id, title and sortOrder属性:

  • Id属性是此资源的标识。您可以在管理菜单中定义资源,配置和限制对模块控制器的访问时使用此功能。这是一个唯一的字符串,应采用以下格式:Vendor_ModuleName :: resource_name。
  • Title属性是在资源树中显示时此资源的标签。
  • sortOrder属性在树中定义此资源的位置。

完成此操作后,请刷新缓存并在资源树上查看结果

第2步:刷新Magento缓存

确保管理员菜单项显示在Magento 2管理员上,您应该尝试刷新Magento 2缓存。

第3步:检查ACL规则

在某些地方我们放置ACL资源以限制访问:

管理菜单:如果商店所有者不允许,请放置ACL资源以隐藏菜单。

文件: app/code/Mageplaza/HelloWorld/etc/adminhtml/menu.xml

<add id="Mageplaza_HelloWorld::helloworld" title="Hello World" module="Mageplaza_HelloWorld" sortOrder="51" resource="Mageplaza_HelloWorld::helloworld"/>

系统配置:放置ACL资源以限制对此部分页面的访问。

文件: app/code/Mageplaza/HelloWorld/etc/adminhtml/system.xml

<section id="helloworld" translate="label" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
        ….
            <resource>Mageplaza_HelloWorld::helloworld_configuration</resource>
        ….
</section>

我们将Mageplaza_HelloWorld::helloworld_configuration在Magento 2中使用如何创建System.xml配置

使用资源它也可以在控制器上使用。

在管理员控制器中:Magento提供了一种抽象类型Magento\Framework\AuthorizationInterface,您可以使用该类型根据特定ACL验证当前登录的用户。您可以使用变量调用该对象:$this->_authorization。在控制器中,您必须编写受保护的函数来检查资源:

示例:文件: vendor/magento/module-customer/Controller/Adminhtml/Index.php

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

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论