From e8e99411ed40a07e71506f849fb3aafa321d3c43 Mon Sep 17 00:00:00 2001 From: Tadas Gliaubicas Date: Wed, 6 Jun 2018 12:12:26 +0300 Subject: [PATCH 1/2] Start integrate rbac bundle. --- composer.json | 15 ++-- src/Menu/MainMenuBuilder.php | 8 ++- src/Model/AdminUser.php | 71 +++++++++++++++++++ src/Model/AdminUserInterface.php | 3 +- src/Resources/config/app/config.yml | 2 + .../config/app/sylius/permission.yml | 2 + src/Resources/config/app/sylius/role.yml | 3 + .../config/doctrine/model/AdminUser.orm.xml | 11 +++ src/Resources/config/grids/permission.yml | 23 ++++++ src/Resources/config/grids/role.yml | 21 ++++++ src/Resources/config/routing.xml | 2 + src/Resources/config/routing/permission.yml | 20 ++++++ src/Resources/config/routing/role.yml | 20 ++++++ src/Resources/translations/messages.en.yml | 1 + 14 files changed, 193 insertions(+), 9 deletions(-) create mode 100644 src/Resources/config/app/sylius/permission.yml create mode 100644 src/Resources/config/app/sylius/role.yml create mode 100644 src/Resources/config/grids/permission.yml create mode 100644 src/Resources/config/grids/role.yml create mode 100644 src/Resources/config/routing/permission.yml create mode 100644 src/Resources/config/routing/role.yml diff --git a/composer.json b/composer.json index 583be51..f723422 100644 --- a/composer.json +++ b/composer.json @@ -1,17 +1,18 @@ { "name": "admin-platform/admin-bundle", "type": "symfony-bundle", - "description": "Admin platform for Symfony2 projects.", + "description": "Admin bundle for Symfony projects.", "license": "MIT", "require": { "php": "^7.1", - "sylius/grid-bundle": "^1.0.0", - "sylius/locale-bundle": "^1.0.0", - "sylius/mailer-bundle": "^1.0.0", - "sylius/resource-bundle": "^1.0.0", - "sylius/ui-bundle": "^1.0.0", - "sylius/user-bundle": "^1.0.0" + "admin-platform/rbac-bundle": "^1.0", + "sylius/grid-bundle": "^1.0", + "sylius/locale-bundle": "^1.0", + "sylius/mailer-bundle": "^1.0", + "sylius/resource-bundle": "^1.0", + "sylius/ui-bundle": "^1.0", + "sylius/user-bundle": "^1.0" }, "require-dev": { "phpunit/phpunit": "^5.6" diff --git a/src/Menu/MainMenuBuilder.php b/src/Menu/MainMenuBuilder.php index b75de23..004d2c2 100644 --- a/src/Menu/MainMenuBuilder.php +++ b/src/Menu/MainMenuBuilder.php @@ -62,10 +62,16 @@ private function addConfigurationSubMenu(ItemInterface $menu) ->setLabelAttribute('icon', 'translate') ; + $configuration + ->addChild('roles', ['route' => 'sylius_admin_role_index']) + ->setLabel('admin_platform.menu.main.configuration.roles') + ->setLabelAttribute('icon', 'shield alternate') + ; + $configuration ->addChild('admin_users', ['route' => 'admin_platform_admin_admin_user_index']) ->setLabel('admin_platform.menu.main.configuration.admin_users') - ->setLabelAttribute('icon', 'lock') + ->setLabelAttribute('icon', 'users') ; } } diff --git a/src/Model/AdminUser.php b/src/Model/AdminUser.php index bb4ca90..6cf9258 100644 --- a/src/Model/AdminUser.php +++ b/src/Model/AdminUser.php @@ -4,6 +4,9 @@ namespace Platform\Bundle\AdminBundle\Model; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Sylius\Component\Rbac\Model\RoleInterface; use Sylius\Component\User\Model\User; class AdminUser extends User implements AdminUserInterface @@ -23,6 +26,11 @@ class AdminUser extends User implements AdminUserInterface */ protected $localeCode; + /** + * @var Collection|RoleInterface[] + */ + private $authorizationRoles; + /** * AdminUser constructor. */ @@ -31,6 +39,7 @@ public function __construct() parent::__construct(); $this->roles = [AdminUserInterface::DEFAULT_ADMIN_ROLE]; + $this->authorizationRoles = new ArrayCollection(); } /** @@ -80,4 +89,66 @@ public function setLocaleCode(?string $code): void { $this->localeCode = $code; } + + /** + * @return Collection|RoleInterface[] + */ + public function getAuthorizationRoles(): Collection + { + return $this->authorizationRoles; + } + + /** + * @param Collection|RoleInterface[] $authorizationRoles + * + * @return $this + */ + public function setAuthorizationRoles(Collection $authorizationRoles): self + { + $this->authorizationRoles = $authorizationRoles; + + return $this; + } + + /** + * @param RoleInterface $authorizationRole + * + * @return AdminUser + */ + public function addAuthorizationRole(RoleInterface $authorizationRole): self + { + if (false === $this->authorizationRoles->contains($authorizationRole)) { + $this->authorizationRoles->add($authorizationRole); + } + + return $this; + } + + /** + * @param RoleInterface $authorizationRole + * + * @return AdminUser + */ + public function removeAuthorizationRole(RoleInterface $authorizationRole): self + { + $this->authorizationRoles->remove($authorizationRole); + + return $this; + } + + /** + * @param string $authorizationRoleCode + * + * @return bool + */ + public function hasAuthorizationRoleCode(string $authorizationRoleCode): bool + { + foreach ($this->authorizationRoles as $role) { + if ($role->getCode() === $authorizationRoleCode) { + return true; + } + } + + return false; + } } diff --git a/src/Model/AdminUserInterface.php b/src/Model/AdminUserInterface.php index 1300def..399bc27 100644 --- a/src/Model/AdminUserInterface.php +++ b/src/Model/AdminUserInterface.php @@ -4,9 +4,10 @@ namespace Platform\Bundle\AdminBundle\Model; +use Sylius\Component\Rbac\Model\IdentityInterface; use Sylius\Component\User\Model\UserInterface; -interface AdminUserInterface extends UserInterface +interface AdminUserInterface extends UserInterface, IdentityInterface { public const DEFAULT_ADMIN_ROLE = 'ROLE_ADMINISTRATION_ACCESS'; diff --git a/src/Resources/config/app/config.yml b/src/Resources/config/app/config.yml index b18af07..b73e591 100644 --- a/src/Resources/config/app/config.yml +++ b/src/Resources/config/app/config.yml @@ -1,5 +1,7 @@ imports: - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/grid.yml" } - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/locale.yml" } +# - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/permission.yml" } - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/resource.yml" } + - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/role.yml" } - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/user.yml" } diff --git a/src/Resources/config/app/sylius/permission.yml b/src/Resources/config/app/sylius/permission.yml new file mode 100644 index 0000000..8e8bd49 --- /dev/null +++ b/src/Resources/config/app/sylius/permission.yml @@ -0,0 +1,2 @@ +imports: + - { resource: "@PlatformAdminBundle/Resources/config/grids/permission.yml" } diff --git a/src/Resources/config/app/sylius/role.yml b/src/Resources/config/app/sylius/role.yml new file mode 100644 index 0000000..385e807 --- /dev/null +++ b/src/Resources/config/app/sylius/role.yml @@ -0,0 +1,3 @@ +imports: + - { resource: "@SyliusRbacBundle/Resources/config/app/config.yml" } + - { resource: "@PlatformAdminBundle/Resources/config/grids/role.yml" } diff --git a/src/Resources/config/doctrine/model/AdminUser.orm.xml b/src/Resources/config/doctrine/model/AdminUser.orm.xml index b042c0a..c54de65 100644 --- a/src/Resources/config/doctrine/model/AdminUser.orm.xml +++ b/src/Resources/config/doctrine/model/AdminUser.orm.xml @@ -13,6 +13,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/Resources/config/grids/permission.yml b/src/Resources/config/grids/permission.yml new file mode 100644 index 0000000..c14616b --- /dev/null +++ b/src/Resources/config/grids/permission.yml @@ -0,0 +1,23 @@ +sylius_grid: + grids: + admin_platform_permission: + driver: + name: doctrine/orm + options: + class: "%sylius.model.permission.class%" + fields: + description: + type: string + label: sylius.ui.description + updatedAt: + type: datetime + label: sylius.ui.last_update + actions: + main: + create: + type: create + item: + update: + type: update + delete: + type: delete diff --git a/src/Resources/config/grids/role.yml b/src/Resources/config/grids/role.yml new file mode 100644 index 0000000..0c5451f --- /dev/null +++ b/src/Resources/config/grids/role.yml @@ -0,0 +1,21 @@ +sylius_grid: + grids: + admin_platform_role: + driver: + name: doctrine/orm + options: + class: "%sylius.model.role.class%" + fields: + name: + type: string + label: sylius.ui.code + updatedAt: + type: datetime + label: sylius.ui.last_update + actions: + main: + create: + type: create + item: + update: + type: update diff --git a/src/Resources/config/routing.xml b/src/Resources/config/routing.xml index 273a610..b2d3e24 100644 --- a/src/Resources/config/routing.xml +++ b/src/Resources/config/routing.xml @@ -7,6 +7,8 @@ + + diff --git a/src/Resources/config/routing/permission.yml b/src/Resources/config/routing/permission.yml new file mode 100644 index 0000000..6288c38 --- /dev/null +++ b/src/Resources/config/routing/permission.yml @@ -0,0 +1,20 @@ +admin_platform_role: + resource: | + alias: sylius.permission + section: admin + path: permissions + templates: PlatformAdminBundle:Crud + except: ['show'] + redirect: index + grid: admin_platform_permission + form: + options: + validation_groups: [platform_admin] + vars: + all: + subheader: sylius.ui.manage_users_able_to_access_administration_panel + templates: + form: PlatformAdminBundle:AdminUser:_form.html.twig + index: + icon: lock + type: sylius.resource diff --git a/src/Resources/config/routing/role.yml b/src/Resources/config/routing/role.yml new file mode 100644 index 0000000..d4ee803 --- /dev/null +++ b/src/Resources/config/routing/role.yml @@ -0,0 +1,20 @@ +admin_platform_role: + resource: | + alias: sylius.role + section: admin + path: roles + templates: PlatformAdminBundle:Crud + except: ['show'] + redirect: index + grid: admin_platform_role + form: + options: + validation_groups: [platform_admin] + vars: + all: + subheader: sylius.ui.manage_users_able_to_access_administration_panel + templates: + form: PlatformAdminBundle:AdminUser:_form.html.twig + index: + icon: lock + type: sylius.resource diff --git a/src/Resources/translations/messages.en.yml b/src/Resources/translations/messages.en.yml index fcbcc86..e043bd1 100644 --- a/src/Resources/translations/messages.en.yml +++ b/src/Resources/translations/messages.en.yml @@ -8,6 +8,7 @@ admin_platform: configuration: header: Configuration locales: Locales + roles: Roles admin_users: Administrators ui: admin_users: Administrators From 179de5e78f221b657cb4ae49bda0e9cff968129f Mon Sep 17 00:00:00 2001 From: Tadas Gliaubicas Date: Wed, 6 Jun 2018 14:13:25 +0300 Subject: [PATCH 2/2] Add permission and role form views --- src/Menu/MainMenuBuilder.php | 6 ++++++ src/Resources/config/app/config.yml | 4 ++-- src/Resources/config/routing/permission.yml | 5 +++-- src/Resources/config/routing/role.yml | 5 +++-- src/Resources/translations/messages.en.yml | 1 + .../views/Permission/_form.html.twig | 15 +++++++++++++ src/Resources/views/Role/_form.html.twig | 21 +++++++++++++++++++ 7 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 src/Resources/views/Permission/_form.html.twig create mode 100644 src/Resources/views/Role/_form.html.twig diff --git a/src/Menu/MainMenuBuilder.php b/src/Menu/MainMenuBuilder.php index 004d2c2..b9ea0a3 100644 --- a/src/Menu/MainMenuBuilder.php +++ b/src/Menu/MainMenuBuilder.php @@ -65,6 +65,12 @@ private function addConfigurationSubMenu(ItemInterface $menu) $configuration ->addChild('roles', ['route' => 'sylius_admin_role_index']) ->setLabel('admin_platform.menu.main.configuration.roles') + ->setLabelAttribute('icon', 'low vision') + ; + + $configuration + ->addChild('permissions', ['route' => 'sylius_admin_permission_index']) + ->setLabel('admin_platform.menu.main.configuration.permissions') ->setLabelAttribute('icon', 'shield alternate') ; diff --git a/src/Resources/config/app/config.yml b/src/Resources/config/app/config.yml index b73e591..503cae7 100644 --- a/src/Resources/config/app/config.yml +++ b/src/Resources/config/app/config.yml @@ -1,7 +1,7 @@ imports: - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/grid.yml" } - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/locale.yml" } -# - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/permission.yml" } - - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/resource.yml" } + - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/permission.yml" } - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/role.yml" } + - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/resource.yml" } - { resource: "@PlatformAdminBundle/Resources/config/app/sylius/user.yml" } diff --git a/src/Resources/config/routing/permission.yml b/src/Resources/config/routing/permission.yml index 6288c38..ba3ded3 100644 --- a/src/Resources/config/routing/permission.yml +++ b/src/Resources/config/routing/permission.yml @@ -7,14 +7,15 @@ admin_platform_role: except: ['show'] redirect: index grid: admin_platform_permission + permission: true form: options: validation_groups: [platform_admin] vars: all: - subheader: sylius.ui.manage_users_able_to_access_administration_panel + subheader: sylius.ui.manage_user_role_permissions templates: - form: PlatformAdminBundle:AdminUser:_form.html.twig + form: PlatformAdminBundle:Permission:_form.html.twig index: icon: lock type: sylius.resource diff --git a/src/Resources/config/routing/role.yml b/src/Resources/config/routing/role.yml index d4ee803..888e593 100644 --- a/src/Resources/config/routing/role.yml +++ b/src/Resources/config/routing/role.yml @@ -7,14 +7,15 @@ admin_platform_role: except: ['show'] redirect: index grid: admin_platform_role + permission: true form: options: validation_groups: [platform_admin] vars: all: - subheader: sylius.ui.manage_users_able_to_access_administration_panel + subheader: sylius.ui.manage_user_roles templates: - form: PlatformAdminBundle:AdminUser:_form.html.twig + form: PlatformAdminBundle:Role:_form.html.twig index: icon: lock type: sylius.resource diff --git a/src/Resources/translations/messages.en.yml b/src/Resources/translations/messages.en.yml index e043bd1..dcf0698 100644 --- a/src/Resources/translations/messages.en.yml +++ b/src/Resources/translations/messages.en.yml @@ -8,6 +8,7 @@ admin_platform: configuration: header: Configuration locales: Locales + permissions: Permissions roles: Roles admin_users: Administrators ui: diff --git a/src/Resources/views/Permission/_form.html.twig b/src/Resources/views/Permission/_form.html.twig new file mode 100644 index 0000000..953cdfc --- /dev/null +++ b/src/Resources/views/Permission/_form.html.twig @@ -0,0 +1,15 @@ +{{ form_errors(form) }} +
+
+

{{ 'sylius.ui.general_info'|trans }}

+
+ {{ form_row(form.code) }} +
+
+ {{ form_row(form.parent) }} +
+
+
+ {{ form_row(form.description) }} +
+
diff --git a/src/Resources/views/Role/_form.html.twig b/src/Resources/views/Role/_form.html.twig new file mode 100644 index 0000000..e96a383 --- /dev/null +++ b/src/Resources/views/Role/_form.html.twig @@ -0,0 +1,21 @@ +{{ form_errors(form) }} +
+
+

{{ 'sylius.ui.general_info'|trans }}

+
+ {{ form_row(form.code) }} +
+
+ {{ form_row(form.name) }} +
+
+ {{ form_row(form.parent) }} +
+
+
+ {{ form_row(form.permissions) }} +
+
+ {{ form_row(form.description) }} +
+
\ No newline at end of file