sylius / rbac-plugin
Sylius 角色和权限管理插件
Requires
- php: ^7.2
- prooph/service-bus-symfony-bundle: ^0.7.0
- sylius/sylius: ^1.4
Requires (Dev)
- behat/behat: ^3.4
- behat/mink: ^1.7@dev
- behat/mink-browserkit-driver: ^1.3
- behat/mink-extension: ^2.2
- behat/mink-selenium2-driver: ^1.3
- friends-of-behat/page-object-extension: ^0.3
- friends-of-behat/suite-settings-extension: ^1.0
- friends-of-behat/symfony-extension: ^2.0
- friends-of-behat/variadic-extension: ^1.1
- lakion/mink-debug-extension: ^1.2.3
- phpspec/phpspec: ^5.0
- phpstan/phpstan-doctrine: ^0.11
- phpstan/phpstan-shim: ^0.11
- phpstan/phpstan-symfony: ^0.11
- phpstan/phpstan-webmozart-assert: ^0.11
- phpunit/phpunit: ^6.5
- stripe/stripe-php: ^4.1
- sylius-labs/coding-standard: ^3.0
- symfony/browser-kit: ^3.4|^4.1
- symfony/debug-bundle: ^3.4|^4.1
- symfony/dotenv: ^4.2
- symfony/intl: ^3.4|^4.1
- symfony/web-profiler-bundle: ^3.4|^4.1
- symfony/web-server-bundle: ^3.4|^4.1
Conflicts
- symfony/browser-kit: 4.1.8
- symfony/dependency-injection: 4.1.8
- symfony/dom-crawler: 4.1.8
- symfony/routing: 4.1.8
- symfony/symfony: 4.1.8
This package is auto-updated.
Last update: 2019-08-14 13:11:33 UTC
README
Rbac 插件
此插件为 Sylius 应用程序提供基本的角色和权限管理功能。
注意!
将写入权限添加到权限中自动意味着添加读取权限。
写入权限也意味着更新和删除。
安装
-
使用 composer 需要插件
composer require sylius/rbac-plugin
-
将插件类和
ProophServiceBusBundle
添加到您的bundles.php
文件中。return [ // ... Prooph\Bundle\ServiceBus\ProophServiceBusBundle::class => ['all' => true], Sylius\RbacPlugin\SyliusRbacPlugin::class => ['all' => true], ];
-
重写 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
-
在
config/routes/sylius_rbac.yaml
中导入路由sylius_rbac: resource: "@SyliusRbacPlugin/Resources/config/routing.yml"
-
在
config/packages/sylius_rbac.yaml
中导入配置imports: - { resource: "@SyliusRbacPlugin/Resources/config/config.yml" }
-
将插件迁移复制到您的迁移目录(例如,
src/Migrations
)并应用到您的数据库中cp -R vendor/sylius/rbac-plugin/migrations/* src/Migrations/ bin/console doctrine:migrations:migrate
-
复制重写的
SyliusAdminBundle
模板mkdir templates/bundles/SyliusAdminBundle cp -R vendor/sylius/rbac-plugin/src/Resources/views/SyliusAdminBundle/* templates/bundles/SyliusAdminBundle/
-
运行安装命令
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
您可能还希望将“客户”部分扩展到管理主菜单中(有关更多信息,请参阅此文档章节)。
结果,每个被允许在管理面板中管理客户的管理员也将能够管理供应商。您也可能注意到,权限配置表单中没有任何变化,因为没有添加任何新部分到 RBAC 配置中。
将自定义部分添加到应用程序
如果您想区分新的资源管理权限,另一种可能性是在插件配置中定义自己的自定义部分。
sylius_rbac: custom_sections: suppliers: - app_admin_supplier
好奇心:RBAC 也被定义为自定义部分!您可以在插件源代码中轻松查看。
使用此类配置,您应该注意在管理角色表单中出现了新的权限配置。
为了使新的权限名称显示得更加美观,您还应该在应用程序的翻译文件中配置翻译。
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') ;
完成这些简单的步骤后,您就可以将自定义权限分配给任何现有的管理角色了。
安全问题
如果您认为您发现了一个安全问题,请勿使用问题跟踪器,也请勿公开发布。相反,所有安全问题必须发送到 security@sylius.com
。