sylius/rbac-plugin

此包已被弃用,不再维护。没有建议的替代包。

Sylius 角色和权限管理插件

安装次数: 93,245

依赖者: 0

建议者: 0

安全性: 0

星标: 26

关注者: 8

分支: 9

公开问题: 12

类型:sylius-plugin


README

68747470733a2f2f64656d6f2e73796c6975732e636f6d2f6173736574732f73686f702f696d672f6c6f676f2e706e67

Rbac 插件

68747470733a2f2f73796c6975732e636f6d2f6173736574732f62616467652d6f6666696369616c2d73796c6975732d706c7567696e2e706e67

此插件为 Sylius 应用程序提供基本的角色和权限管理功能。

注意!

将写入权限添加到权限中自动意味着添加读取权限。

写入权限也意味着更新和删除。

安装

  1. 使用 composer 需要插件

    composer require sylius/rbac-plugin
  2. 将插件类和 ProophServiceBusBundle 添加到您的 bundles.php 文件中。

    return [
       // ...
       Prooph\Bundle\ServiceBus\ProophServiceBusBundle::class => ['all' => true],
       Sylius\RbacPlugin\SyliusRbacPlugin::class => ['all' => true],
    ];
  3. 重写 AdminUser 实体

a) 在基于 Sylius-Standard 的项目中,使用 AdministrationRoleAwareTrait 并在 AdminUser 类中实现 AdministrationRoleAwareInterface

use Doctrine\ORM\Mapping\MappedSuperclass;
use Doctrine\ORM\Mapping\Table;
use Sylius\Component\Core\Model\AdminUser as BaseAdminUser;
use Sylius\RbacPlugin\Entity\AdministrationRoleAwareInterface;
use Sylius\RbacPlugin\Entity\AdministrationRoleAwareTrait;

/**
 * @MappedSuperclass
 * @Table(name="sylius_admin_user")
 */
class AdminUser extends BaseAdminUser implements AdministrationRoleAwareInterface
{
    use AdministrationRoleAwareTrait;
}

b) 并在所选配置文件中重写模型的类(例如,config/_sylius.yaml

sylius_user:
    resources:
        admin:
            user:
                classes:
                    model: App\Entity\AdminUser
  1. config/routes/sylius_rbac.yaml 中导入路由

    sylius_rbac:
        resource: "@SyliusRbacPlugin/Resources/config/routing.yml"
  2. config/packages/sylius_rbac.yaml 中导入配置

    imports:
        - { resource: "@SyliusRbacPlugin/Resources/config/config.yml" }
  3. 将插件迁移复制到您的迁移目录(例如,src/Migrations)并应用到您的数据库中

    cp -R vendor/sylius/rbac-plugin/migrations/* src/Migrations/
    bin/console doctrine:migrations:migrate
  4. 复制重写的 SyliusAdminBundle 模板

    mkdir templates/bundles/SyliusAdminBundle
    cp -R vendor/sylius/rbac-plugin/src/Resources/views/SyliusAdminBundle/* templates/bundles/SyliusAdminBundle/
  5. 运行安装命令

    bin/console sylius-rbac:install-plugin

    这包括

    • sylius:fixtures:load

      加载具有默认“无部分访问”角色的固定数据。

      命令以非交互模式运行,因此它将不会清除您的数据库。但是,如果您再次运行它,它将由于重复条目约束违反而抛出异常。

      如果您想在同一环境中再次安装 RBAC 插件,您必须手动通过管理面板删除所有角色,或者单独运行所有命令,除了 sylius:fixtures:load

    • sylius-rbac:normalize-administrators

      将之前步骤中创建的角色分配给所有已存在的管理员。

    • sylius-rbac:grant-access <roleName> <adminSections>

      其中 adminSections 可以是以下这些中的任意一个,以空格分隔

      • 目录管理
      • 配置
      • 客户管理
      • 市场营销管理
      • 销售管理

      注意!

      定义根管理员电子邮件地址有两种方式

      • 将其作为配置文件中的参数提供(在插件安装期间不会再次通过 CLI 请求您输入它)
      parameters:
          root_administrator_email: example@example.com
      • 通过 CLI 提供

      例如,bin/console sylius-rbac:grant-access administrator configuration catalogManagement

      为了允许访问管理面板部分,请提供管理员的电子邮件地址:sylius@example.com

      默认情况下,安装命令创建具有对所有部分访问权限的 Configurator 角色。

注意!

您还可以使用 bin/console sylius-rbac:grant-access-to-given-administrator <email> <roleName> <adminSections> 命令以将电子邮件地址作为输入参数提供。

注意!

AdminUser 实体引用 AdministrationRoleInterface,这是一个位于默认 AdministrationRole 实现之上的抽象层。您可以通过在您的 *.yaml 配置文件中添加以下片段轻松地进行自定义。

doctrine:
    orm:
        resolve_target_entities:
            Sylius\RbacPlugin\Entity\AdministrationRoleInterface: FullyQualifiedClassName

部分配置

默认情况下,RbacPlugin 为基本 Sylius 部分(目录、配置、客户、营销和销售)以及 RBAC 部分(由插件本身添加)提供了访问配置。每个部分都与许多与之相关的路由前缀相关联,描述了哪些部分可以管理哪些资源。

然而,Sylius 应用通常在现有部分或全新的部分中有很多自定义功能。此插件允许您扩展其配置,以限制对自定义路由的访问。

例如,假设我们有一个简单的 Supplier 资源(仅包含 string $name 属性)。它已经生成了我们想要限制访问的路由。

  • app_admin_supplier_index
  • app_admin_supplier_create
  • app_admin_supplier_update
  • app_admin_supplier_bulk_delete
  • app_admin_supplier_delete

如果您不知道如何在 Sylius 应用程序中创建和配置自定义资源,请查看相关文档章节

扩展基本 Sylius 部分以添加新路由前缀

要使用例如“客户管理”权限来限制与供应商相关的路由,只需将适当的路由前缀添加到客户部分配置中即可。

sylius_rbac:
    sylius_sections:
        customers:
            - app_admin_supplier

您可能还希望将“客户”部分扩展到管理主菜单中(有关更多信息,请参阅此文档章节)。

Customers sections customized

结果,每个被允许在管理面板中管理客户的管理员也将能够管理供应商。您也可能注意到,权限配置表单中没有任何变化,因为没有添加任何新部分到 RBAC 配置中。

Permissions configuration - no changes

将自定义部分添加到应用程序

如果您想区分新的资源管理权限,另一种可能性是在插件配置中定义自己的自定义部分。

sylius_rbac:
    custom_sections:
        suppliers:
            - app_admin_supplier

好奇心:RBAC 也被定义为自定义部分!您可以在插件源代码中轻松查看。

使用此类配置,您应该注意在管理角色表单中出现了新的权限配置。

Permissions configuration - no changes

为了使新的权限名称显示得更加美观,您还应该在应用程序的翻译文件中配置翻译。

sylius_rbac:
    ui:
        permission:
            suppliers: Suppliers

小心!

您应该注意,默认情况下,RBAC 插件使用放置在 HardcodedRouteNameChecker 类中的逻辑来识别与管理员相关的路由,如下所示。

    public function isAdminRoute(string $routeName): bool
    {
        return
            strpos($routeName, 'sylius_admin') !== false ||
            strpos($routeName, 'sylius_rbac_admin') !== false
        ;
    }

假设您向应用程序添加了一个新路由,并且希望它被 RBAC 插件处理。一旦这样做,您应该覆盖上面的检查器并按以下方式自定义它。

    public function isAdminRoute(string $routeName): bool
    {
        return
            strpos($routeName, 'sylius_admin') !== false ||
            strpos($routeName, 'sylius_rbac_admin') !== false ||
            strpos($routeName, 'your_custom_phrase' !== false
        ;
    }

记住!

在配置管理主菜单中的自定义部分时,请将其命名为与插件配置中 custom_sections 键下相同的名称。它将自动隐藏和显示,就像基本 Sylius 部分一样!

$suppliersSubmenu = $menu->addChild('suppliers')->setLabel('Suppliers');

$suppliersSubmenu
    ->addChild('supplier', ['route' => 'app_admin_supplier_index'])
    ->setLabel('Manage Suppliers')
    ->setLabelAttribute('icon', 'address card outline')
;

Suppliers section

完成这些简单的步骤后,您就可以将自定义权限分配给任何现有的管理角色了。

安全问题

如果您认为您发现了一个安全问题,请勿使用问题跟踪器,也请勿公开发布。相反,所有安全问题必须发送到 security@sylius.com