dized/module-front-acl

用于Magento 2项目前端的ACL系统

安装: 320

依赖: 1

建议: 0

安全: 0

星星: 3

关注者: 1

分支: 1

开放问题: 1

类型:magento2-module

1.0.3 2023-10-08 21:19 UTC

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

Module Configuration

添加角色和权限。

要添加新角色或权限,在您的项目模块中创建 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。在此处选择所需数据并保存客户。

Customer Settings

重要 如果权限树未显示,您可能正在使用带有较旧版本的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_ROLEFRONT_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