Magento2 擴充模組的ACL權限
過去我們已介紹了如何設定Magento後台使用者的權限,在原生的架構下,各模組依功能可細分控管項目,而在客製擴充功能時,勢必也會遇到權限控管需求,今天就跟各位一同來了解Magento的ACL實作方式。
首先,需要先了解Magento的ACL架構,是由使用者(User),角色(Role),與資源(Resource)所組成。透過指定角色擁有哪些資源,再將使用者納入角色,來建構使用者對資源的存取鏈。
因此要為新功能增加權限,第一步就是定義新的資源。
以範例模組AstralWeb_Acl為例,假設要新增對這個模組所屬資料的瀏覽權限 view。
如下編輯檔案 etc/acl.xml:
清除快取後,就可以在後台角色編輯頁,看到自己新增的資源:
有了可存取的資源,再來就是實作存取的權限檢查點。
我們可以在後台的選單上加上限制,有權限的登入者才看得到該選單。
編輯檔案etc/adminhtml/menu.xml,針對選單項目的resource屬性,綁定對應的資源id。
那麼左方的客製選單是否顯示,就能被控管囉!
除了選單的顯示與否,還需要控制Contoller,避免使用者直接打網址存取無權限的頁面。
以上述選單網址 astralwebacl/view/index 來實作,只需在對應的Controller類別裡,如下複寫_isAllowed方法:
Controller/Adminhtml/View/Index.php
明確的定義出要確認的資源id權限,就可以限制使用者的網址存取了。
另外值得一提的是,Magento的權限還能進階控管到後台頁面的區塊唷!
在當前範例,我們將此頁面內容分成A與B兩區塊:
為了細分權限,另外新增資源view_a與view_b
etc/acl.xml
然後為各區塊加上屬性aclResource,併綁上對應的資源id:
view/adminhtml/layout/astralwebacl_view_index.xml
現在調整一下使用者的權限,只開放瀏覽B區塊:
則該管理者瀏覽時為如下畫面,就會只剩下B區塊:
最後,還有一個位置可以置入權限檢查,就是web API的端點。只需針對etc/webapi.xml裡定義的端點,綁定所屬資源即可。
以上就是根據官方文件,ACL實作上能管轄的範圍。
關於ACL的應用,最後有個重要的提醒:我們在開發自己的模組時,有時會以其他模組為基礎去擴充,而在程式取用其他模組功能時,也會受制於其他模組的權限。因此,編輯後台角色權限,不能以模組為切割單位,換句話說,當功能操作遇到權限不通時,不妨去檢查一下是否被具相依性的模組權限阻擋,這種情形也適用於原生模組。
希望今天的分享幫助大家更好地維護自己的Magento系統,我們下次見!
如果有您有更多疑問可以詢問我們,未來會撰寫更多電商網站相關文章,您想知道什麼嗎?歡迎在下方留言給我們。或追蹤我們的粉絲專頁及IG,也別忘了訂閱電子報,就不錯過最新文章喔!
想學習更多Magento設定嗎?請見:Magento教學導覽
我要留言