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..b9ea0a3 100644
--- a/src/Menu/MainMenuBuilder.php
+++ b/src/Menu/MainMenuBuilder.php
@@ -62,10 +62,22 @@ 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', 'low vision')
+ ;
+
+ $configuration
+ ->addChild('permissions', ['route' => 'sylius_admin_permission_index'])
+ ->setLabel('admin_platform.menu.main.configuration.permissions')
+ ->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..503cae7 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/role.yml" }
- { resource: "@PlatformAdminBundle/Resources/config/app/sylius/resource.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 @@