7.Magento 2 后臺(tái) ACL 權(quán)限控制列表

Magento 2 模塊開發(fā)基礎(chǔ)部分 - 目錄

Magneto 2的ACL面板使用授權(quán)系統(tǒng)來創(chuàng)建權(quán)控制規(guī)則,權(quán)限控制規(guī)則可以讓店鋪所有者為每個(gè)用戶創(chuàng)建非常細(xì)粒度的角色。本文我們來研究它的工作機(jī)制并為我們的自定義模塊添加權(quán)限控制。

Magento 2 權(quán)限控制列表規(guī)則

后臺(tái) ACL資源 可以在 System > Permissions > User Roles 菜單下看到。當(dāng)我們點(diǎn)擊 Add new Role 按鈕會(huì)看到如下圖頁面:

7-role-resources.png

在這個(gè)權(quán)限資源面板你可看到一個(gè)樹狀列表顯示的系統(tǒng)中定義的所有權(quán)限資源。你可以選擇所有權(quán)限資源,也可以給角色或用戶選擇某幾個(gè)權(quán)限資源。所有屬于當(dāng)前角色的用戶都限定只能訪問你選擇的權(quán)限資源,他們不能看到或訪問其它權(quán)限資源。

要添加后臺(tái)管理員ACL有如下幾步:

  • 1 添加 ACL 規(guī)則
  • 2 清空緩存
  • 3 檢測ACL規(guī)則

第一步 創(chuàng)建ACL規(guī)則

還是使用HelloWorld模塊演示如何添加權(quán)限控制。在上兩章節(jié)我們經(jīng)常會(huì)看到 resource 這個(gè)屬性。現(xiàn)在讓我們把那些權(quán)限資源注冊到系統(tǒng)里,以便系統(tǒng)識(shí)別并讓我們可以把這些權(quán)限資源指派到某個(gè)角色。要注冊權(quán)限資源我們使用位于 app/code/{namespace}/{modeule}/etc/acl.xml 的這個(gè) acl.xml 文件。下面開始創(chuàng)建:

文件 app/code/Aqrun/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="Aqrun_HelloWorld::helloworld" title="你好世界" 
                    translate="title" sortOrder="51">
                    <resource id="Aqrun_HelloWorld::post" title="文章管理" 
                        translate="title" sortOrder="51" />
                    <resource id="Aqrun_HelloWorld::helloworld_configuration" 
                        translate="title" title="參數(shù)設(shè)置" sortOrder="99" />
                </resource>
                <resource id="Magento_Backend::stores">
                    <resource id="Magento_Backend::stores_settings">
                        <resource id="Magento_Config::config">
                            <resource id="Aqrun_HelloWorld::helloworld_config"
                                translate="title" title="你好世界設(shè)置" sortOrder="100"/>
                        </resource>
                    </resource>
                </resource>
            </resource>
        </resources>
    </acl>
</config>

我們的權(quán)限資源做為子節(jié)點(diǎn)放在 Magneto_Backend::admin 節(jié)點(diǎn)下面,每個(gè)權(quán)限資源都會(huì)有 id, title, sortOrder 屬性:

  • id 是資源的唯一標(biāo)識(shí)。你可以在定義后臺(tái)菜單、參數(shù)配置時(shí)把這個(gè)標(biāo)識(shí)作為值賦給 resource 屬性。標(biāo)識(shí)是唯一的并且格式是: Vendor_ModuleName::resource_name。
  • title 屬性是在權(quán)限資源樹列表顯示的名稱
  • sortOrder 控制權(quán)限資源在樹中顯示的順序

接下來清空緩存并查看權(quán)限資源樹:

7-role-resources-result.png

第二步 清緩存

第三步 測試 ACL 規(guī)則

有很多地方我們可以使用ACL權(quán)限資源控制用戶的訪問:

后臺(tái)菜單: 使用 ACL 權(quán)限資源可以對(duì)未授權(quán)用戶隱藏菜單項(xiàng)

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

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

系統(tǒng)參數(shù)設(shè)置: 使用ACL權(quán)限資源限制 section 的訪問

文件: app/code/Aqrun/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>

權(quán)限資源也可以用于控制器

后臺(tái)控制器

系統(tǒng)提供接口 Magento\Framework\AuthorizationInterface,使用這個(gè)接口可以判斷當(dāng)前登陸用戶是否有特定權(quán)限??梢酝ㄟ^變量: $this->_authorization 獲取它的實(shí)例對(duì)象。在控制器中需要定義一個(gè)保護(hù)方法來檢測權(quán)限資源:

如文件: vendor/magento/module-customer/Controler/Adminhtml/Index.php

protected function _isAlloed()
{
    return $this->_authorization->isAllowed('Magento_Customer::manage');
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容