dized / module-front-acl
用于Magento 2项目前端的ACL系统
Requires
- dized/module-core: *
- magento/module-customer: *
This package is auto-updated.
Last update: 2024-09-08 23:16:36 UTC
README
Magento 2项目前端的ACL系统。
一个模块,允许您充分利用您开发的模块中前端ACL的功能。
在Magento 2.4版本和PHP 7.4版本上开发和测试。
关键特性
- 通过XML文件创建自己的角色和权限。
- 为每个角色设置默认权限。
- 在管理面板中为每位客户设置必要的角色和权限。
- 自动为新创建的客户设置默认角色和权限(使用插件)。
- 轻松为控制器/操作和块使用此功能。
安装。
composer require dized/module-front-acl
bin/magento setup:upgrade --keep-generated
bin/magento setup:di:compile
bin/magento cache:clean
重要 在Magento Admin中启用模块: 管理员面板 -> 商店 -> 设置 -> 配置 -> DiZed Team Extensions -> 前端ACL。
添加角色和权限。
要添加新角色或权限,在您的项目模块中创建 etc/acl_front.xml 文件。您可以在本模块中查看文件的示例。
将角色插入 FrontAcl_Role::index 资源,将权限插入 FrontAcl_Permission::index 资源。
如果您想为某些角色设置默认权限,请使用 FrontAcl_Defaults::index 资源。请注意语法 - Relation_ {RoleCamelCase}::permission_snake_case。
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd"> <acl> <resources> <!-- Roles: --> <resource id="FrontAcl_Role::index" title="Roles" translate="title"> <resource id="FrontAcl_Role::buyer" title="Buyer" translate="title"/> <resource id="FrontAcl_Role::seller" title="Seller" translate="title"/> </resource> <!-- Permissions: --> <resource id="FrontAcl_Permission::index" title="Permissions" translate="title"> <resource id="FrontAcl_Permission::catalog" title="Catalog" translate="title"/> <resource id="FrontAcl_Permission::checkout" title="Checkout" translate="title"/> <resource id="FrontAcl_Permission::wishlist" title="Wishlist" translate="title"/> </resource> <!-- Defaults (default relations between roles and permissions): --> <resource id="FrontAcl_Defaults::index" title="Default Relations" translate="title"> <resource id="Relation_Buyer::catalog" title="Catalog"/> <resource id="Relation_Buyer::checkout" title="Checkout"/> <resource id="Relation_Buyer::wishlist" title="Wishlist"/> <resource id="Relation_Seller::catalog" title="Catalog"/> </resource> </resources> </acl> </config>
在管理面板中设置客户角色和权限。
要通过管理面板为客户设置角色或权限,只需以管理员身份登录,然后按照以下路径进行: 客户 -> 所有客户 -> 在网格中点击“编辑”以编辑客户 -> 标签页前端ACL。在此处选择所需数据并保存客户。
重要 如果权限树未显示,您可能正在使用带有较旧版本的jQuery jsTree库的Magento版本。在这种情况下,请尝试使用之前的脚本“view/adminhtml/web/js/customer/permissions-tree.js”版本。
自动为新创建的客户设置默认角色和权限。
如果您需要自动为新客户设置角色和权限,可以为此功能创建一个插件: \DiZed\FrontAcl\Plugin\Customer\Api\AccountManagement::getDetectedRole(CustomerInterface $customer)。在函数体中,您需要根据客户对象实现必要的逻辑,并返回所需的字符串作为角色。然后,基于此角色,将自动获取并应用到客户上的默认权限。
/** * Add custom logic to identify customer role. * * @param \DiZed\FrontAcl\Plugin\Customer\Api\AccountManagement $subject * @param string $result * @param \Magento\Customer\Api\Data\CustomerInterface $customer * @return string * @see \DiZed\FrontAcl\Plugin\Customer\Api\AccountManagement::getDetectedRole */ public function afterGetDetectedRole( \DiZed\FrontAcl\Plugin\Customer\Api\AccountManagement $subject, string $result, CustomerInterface $customer ): string { // @todo Need to add custom logic here... return $result; }
为控制器/操作和块使用此功能。
要检查控制器/操作中的客户角色或权限,您需要实现 \DiZed\FrontAcl\Controller\App\HttpAclActionInterface 接口并使用 FRONT_ACL_ROLE 或 FRONT_ACL_PERMISSION 常量。您还可以使用 isFrontClassAllowed() 公共函数来指定更精确的条件。
<?php namespace Name\Space\Sample\Action; use DiZed\FrontAcl\Controller\App\HttpAclActionInterface; use Magento\Framework\App\Action\HttpGetActionInterface; use Magento\Framework\View\Result\Page; use Magento\Framework\View\Result\PageFactory; class Sample implements HttpGetActionInterface, HttpAclActionInterface { /** * Front ACL Role. */ const FRONT_ACL_ROLE = ['FrontAcl_Role::sample']; /** * Front ACL Permission. */ const FRONT_ACL_PERMISSION = ['FrontAcl_Permission::sample']; /** * @var PageFactory */ protected $resultPageFactory; /** * Action constructor. * * @param PageFactory $resultPageFactory */ public function __construct( PageFactory $resultPageFactory ) { $this->resultPageFactory = $resultPageFactory; } /** * Is action allowed? * * @return bool */ public function isFrontClassAllowed(): bool { return true; } /** * Execute action. * * @return Page */ public function execute(): Page { return $this->resultPageFactory->create(); } }
所有这些属性也适用于块,但您需要实现 \DiZed\FrontAcl\Block\View\Element\AclBlockInterface 接口。
<?php namespace Name\Space\Sample\Block; use DiZed\FrontAcl\Block\View\Element\AclBlockInterface; use Magento\Framework\View\Element\Template; class Sample extends Template implements AclBlockInterface { /** * Front ACL Role. */ const FRONT_ACL_ROLE = ['FrontAcl_Role::sample']; /** * Front ACL Permission. */ const FRONT_ACL_PERMISSION = ['FrontAcl_Permission::sample']; /** * Is block allowed? * * @return bool */ public function isFrontClassAllowed(): bool { return true; } }
获取具有特定角色和权限的客户的集合。
只需使用 \DiZed\FrontAcl\Helper\Data::getCustomerCollection 方法代替标准 $this->customerCollectionFactory->create();
其他有用功能。
- 对于您自己的模块中独立的角色和权限操作: \DiZed\FrontAcl\Api\RoleManagementInterface。
- 获取可用的角色、权限以及更多功能列表: \DiZed\FrontAcl\Helper\Data。
- 将使用权限常量的操作添加到您的自定义类中: \DiZed\FrontAcl\Helper\Traits\Acl。

