Magneto 2 的 ACL 面板使用授权系统来创建权控制规则,权限控制规则可以让店铺所有者为每个用户创建非常细粒度的角色。本文我们来研究它的工作机制并为我们的自定义模块添加权限控制。
Magento 2 权限控制列表规则
后台 ACL 资源 可以在 System > Permissions > User Roles
菜单下看到。当我们点击 Add new Role
按钮会看到如下图页面:
在这个权限资源面板你可看到一个树状列表显示的系统中定义的所有权限资源。你可以选择所有权限资源,也可以给角色或用户选择某几个权限资源。所有属于当前角色的用户都限定只能访问你选择的权限资源,他们不能看到或访问其它权限资源。
要添加后台管理员 ACL 有如下几步:
- 1 添加 ACL 规则
- 2 清空缓存
- 3 检测 ACL 规则
第一步 创建 ACL 规则
还是使用 HelloWorld 模块演示如何添加权限控制。在上两章节我们经常会看到 resource
这个属性。现在让我们把那些权限资源注册到系统里,以便系统识别并让我们可以把这些权限资源指派到某个角色。要注册权限资源我们使用位于 app/code/{namespace}/{modeule}/etc/acl.xml
的这个 acl.xml 文件。下面开始创建:
文件 app/code/Aqrun/HelloWorld/etc/acl.xml
代码:
我们的权限资源做为子节点放在 Magneto_Backend::admin
节点下面,每个权限资源都会有 id, title, sortOrder 属性:
- id 是资源的唯一标识。你可以在定义后台菜单、参数配置时把这个标识作为值赋给
resource
属性。标识是唯一的并且格式是: Vendor_ModuleName::resource_name。 - title 属性是在权限资源树列表显示的名称
- sortOrder 控制权限资源在树中显示的顺序
接下来清空缓存并查看权限资源树:
第二步 清缓存
第三步 测试 ACL 规则
有很多地方我们可以使用 ACL 权限资源控制用户的访问:
后台菜单: 使用 ACL 权限资源可以对未授权用户隐藏菜单项
文件: app/code/Aqrun/HelloWorld/etc/adminhtml/menu.xml
系统参数设置: 使用 ACL 权限资源限制 section 的访问
文件: app/code/Aqrun/HelloWorld/etc/adminhtml/system.xml
权限资源也可以用于控制器
后台控制器
系统提供接口 Magento\Framework\AuthorizationInterface
,使用这个接口可以判断当前登陆用户是否有特定权限。可以通过变量: $this->_authorization
获取它的实例对象。在控制器中需要定义一个保护方法来检测权限资源:
如文件: vendor/magento/module-customer/Controler/Adminhtml/Index.php