Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions composer.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
14 changes: 13 additions & 1 deletion src/Menu/MainMenuBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -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')
;
}
}
71 changes: 71 additions & 0 deletions src/Model/AdminUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -23,6 +26,11 @@ class AdminUser extends User implements AdminUserInterface
*/
protected $localeCode;

/**
* @var Collection|RoleInterface[]
*/
private $authorizationRoles;

/**
* AdminUser constructor.
*/
Expand All @@ -31,6 +39,7 @@ public function __construct()
parent::__construct();

$this->roles = [AdminUserInterface::DEFAULT_ADMIN_ROLE];
$this->authorizationRoles = new ArrayCollection();
}

/**
Expand Down Expand Up @@ -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;
}
}
3 changes: 2 additions & 1 deletion src/Model/AdminUserInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand Down
2 changes: 2 additions & 0 deletions src/Resources/config/app/config.yml
Original file line number Diff line number Diff line change
@@ -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" }
2 changes: 2 additions & 0 deletions src/Resources/config/app/sylius/permission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
imports:
- { resource: "@PlatformAdminBundle/Resources/config/grids/permission.yml" }
3 changes: 3 additions & 0 deletions src/Resources/config/app/sylius/role.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
imports:
- { resource: "@SyliusRbacBundle/Resources/config/app/config.yml" }
- { resource: "@PlatformAdminBundle/Resources/config/grids/role.yml" }
11 changes: 11 additions & 0 deletions src/Resources/config/doctrine/model/AdminUser.orm.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,17 @@

<field name="localeCode" column="locale_code" type="string" length="12" />

<many-to-many field="authorizationRoles" target-entity="Sylius\Component\Rbac\Model\RoleInterface">
<join-table name="platform_admin_user_role">
<join-columns>
<join-column name="user_id" referenced-column-name="id" nullable="false" on-delete="CASCADE" />
</join-columns>
<inverse-join-columns>
<join-column name="role_id" referenced-column-name="id" nullable="false" on-delete="CASCADE" />
</inverse-join-columns>
</join-table>
</many-to-many>

</mapped-superclass>

</doctrine-mapping>
23 changes: 23 additions & 0 deletions src/Resources/config/grids/permission.yml
Original file line number Diff line number Diff line change
@@ -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
21 changes: 21 additions & 0 deletions src/Resources/config/grids/role.yml
Original file line number Diff line number Diff line change
@@ -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
2 changes: 2 additions & 0 deletions src/Resources/config/routing.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
<import resource="routing/admin_user.yml" />
<import resource="routing/dashboard.yml" />
<import resource="routing/locale.yml" />
<import resource="routing/permission.yml" />
<import resource="routing/role.yml" />
<import resource="routing/security.yml" />

</routes>
21 changes: 21 additions & 0 deletions src/Resources/config/routing/permission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
admin_platform_role:
resource: |
alias: sylius.permission
section: admin
path: permissions
templates: PlatformAdminBundle:Crud
except: ['show']
redirect: index
grid: admin_platform_permission
permission: true
form:
options:
validation_groups: [platform_admin]
vars:
all:
subheader: sylius.ui.manage_user_role_permissions
templates:
form: PlatformAdminBundle:Permission:_form.html.twig
index:
icon: lock
type: sylius.resource
21 changes: 21 additions & 0 deletions src/Resources/config/routing/role.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
admin_platform_role:
resource: |
alias: sylius.role
section: admin
path: roles
templates: PlatformAdminBundle:Crud
except: ['show']
redirect: index
grid: admin_platform_role
permission: true
form:
options:
validation_groups: [platform_admin]
vars:
all:
subheader: sylius.ui.manage_user_roles
templates:
form: PlatformAdminBundle:Role:_form.html.twig
index:
icon: lock
type: sylius.resource
2 changes: 2 additions & 0 deletions src/Resources/translations/messages.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ admin_platform:
configuration:
header: Configuration
locales: Locales
permissions: Permissions
roles: Roles
admin_users: Administrators
ui:
admin_users: Administrators
Expand Down
15 changes: 15 additions & 0 deletions src/Resources/views/Permission/_form.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{{ form_errors(form) }}
<div class="column">
<div class="ui segment">
<h4 class="AbstractResourceTypeui dividing header">{{ 'sylius.ui.general_info'|trans }}</h4>
<div class="one field">
{{ form_row(form.code) }}
</div>
<div class="one field">
{{ form_row(form.parent) }}
</div>
</div>
<div class="ui segment">
{{ form_row(form.description) }}
</div>
</div>
21 changes: 21 additions & 0 deletions src/Resources/views/Role/_form.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{{ form_errors(form) }}
<div class="column">
<div class="ui segment">
<h4 class="AbstractResourceTypeui dividing header">{{ 'sylius.ui.general_info'|trans }}</h4>
<div class="one field">
{{ form_row(form.code) }}
</div>
<div class="one field">
{{ form_row(form.name) }}
</div>
<div class="one field">
{{ form_row(form.parent) }}
</div>
</div>
<div class="ui segment">
{{ form_row(form.permissions) }}
</div>
<div class="ui segment">
{{ form_row(form.description) }}
</div>
</div>