Skip to content

Commit aa6091d

Browse files
Add role policies
1 parent ba04780 commit aa6091d

File tree

6 files changed

+83
-3
lines changed

6 files changed

+83
-3
lines changed

components/MenuManagerBundle/src/bundle/Controller/AdminController.php

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
use Doctrine\ORM\EntityManagerInterface;
1616
use Ibexa\Contracts\AdminUi\Controller\Controller;
1717
use Ibexa\Contracts\AdminUi\Notification\NotificationHandlerInterface;
18+
use Ibexa\Contracts\Core\Repository\PermissionResolver;
1819
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
20+
use Ibexa\Core\Base\Exceptions\UnauthorizedException;
1921
use Novactive\EzMenuManager\Form\Type\MenuDeleteType;
2022
use Novactive\EzMenuManager\Form\Type\MenuSearchType;
2123
use Novactive\EzMenuManager\Form\Type\MenuType;
@@ -45,20 +47,23 @@ class AdminController extends Controller
4547
protected NotificationHandlerInterface $notificationHandler;
4648
protected EntityManagerInterface $em;
4749
protected ConfigResolverInterface $configResolver;
50+
protected PermissionResolver $permissionResolver;
4851

4952
/**
5053
* AdminController constructor.
5154
*/
5255
public function __construct(
53-
TranslatorInterface $translator,
56+
TranslatorInterface $translator,
5457
NotificationHandlerInterface $notificationHandler,
55-
EntityManagerInterface $em,
56-
ConfigResolverInterface $configResolver
58+
EntityManagerInterface $em,
59+
ConfigResolverInterface $configResolver,
60+
PermissionResolver $permissionResolver
5761
) {
5862
$this->translator = $translator;
5963
$this->notificationHandler = $notificationHandler;
6064
$this->em = $em;
6165
$this->configResolver = $configResolver;
66+
$this->permissionResolver = $permissionResolver;
6267
}
6368

6469
/**
@@ -72,6 +77,9 @@ public function __construct(
7277
*/
7378
public function listAction(Request $request, $page = 1)
7479
{
80+
if (!$this->permissionResolver->hasAccess('menu_manager', 'list')) {
81+
throw new UnauthorizedException('menu_manager', 'list', []);
82+
}
7583
$queryBuilder = $this->em->createQueryBuilder()
7684
->select('m')
7785
->from(Menu::class, 'm')
@@ -142,6 +150,9 @@ protected function getMenusIds($menus)
142150
*/
143151
public function newAction(Request $request)
144152
{
153+
if (!$this->permissionResolver->hasAccess('menu_manager', 'new')) {
154+
throw new UnauthorizedException('menu_manager', 'new', []);
155+
}
145156
$menu = new Menu();
146157
$menu->setRootLocationId(
147158
$this->configResolver->getParameter('content.tree_root.location_id')
@@ -157,6 +168,10 @@ public function newAction(Request $request)
157168
*/
158169
public function editAction(Request $request, Menu $menu)
159170
{
171+
if (!$this->permissionResolver->hasAccess('menu_manager', 'edit')) {
172+
throw new UnauthorizedException('menu_manager', 'edit', []);
173+
}
174+
160175
$form = $this->createForm(MenuType::class, $menu);
161176
$form->handleRequest($request);
162177
if ($form->isSubmitted() && $form->isValid()) {
@@ -187,6 +202,9 @@ public function editAction(Request $request, Menu $menu)
187202
*/
188203
public function deleteAction(Request $request)
189204
{
205+
if (!$this->permissionResolver->hasAccess('menu_manager', 'delete')) {
206+
throw new UnauthorizedException('menu_manager', 'delete', []);
207+
}
190208
$form = $this->createForm(MenuDeleteType::class);
191209
$form->handleRequest($request);
192210

components/MenuManagerBundle/src/bundle/Controller/ViewController.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
namespace Novactive\EzMenuManagerBundle\Controller;
1414

1515
use Ibexa\Contracts\AdminUi\Controller\Controller;
16+
use Ibexa\Contracts\Core\Repository\PermissionResolver;
17+
use Ibexa\Contracts\ProductCatalog\PermissionResolverInterface;
18+
use Ibexa\Core\Base\Exceptions\UnauthorizedException;
1619
use Novactive\EzMenuManager\Service\MenuBuilder;
1720
use Novactive\EzMenuManagerBundle\Entity\Menu;
1821
use Symfony\Component\HttpFoundation\Response;
@@ -27,11 +30,18 @@
2730
*/
2831
class ViewController extends Controller
2932
{
33+
public function __construct(protected PermissionResolver $permissionResolver)
34+
{
35+
}
36+
3037
/**
3138
* @Route("/view/{menu}", name="menu_manager.menu_view")
3239
*/
3340
public function viewMenuAction(Menu $menu, MenuBuilder $menuBuilder): Response
3441
{
42+
if (!$this->permissionResolver->hasAccess('menu_manager', 'view')) {
43+
throw new UnauthorizedException('menu_manager', 'view', []);
44+
}
3545
return $this->render(
3646
'@ibexadesign/menu_manager/view.html.twig',
3747
[
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/**
4+
* NovaeZRssFeedBundle.
5+
*
6+
* @package NovaeZRssFeedBundle
7+
*
8+
* @author Novactive
9+
* @copyright 2018 Novactive
10+
* @license https://github.com/Novactive/NovaeZRssFeedBundle/blob/master/LICENSE
11+
*/
12+
13+
namespace Novactive\EzMenuManagerBundle\DependencyInjection\Security\Provider;
14+
15+
use Ibexa\Bundle\Core\DependencyInjection\Security\PolicyProvider\YamlPolicyProvider;
16+
use JMS\TranslationBundle\Model\Message;
17+
18+
class MenuPolicyProvider extends YamlPolicyProvider
19+
{
20+
public function getFiles(): array
21+
{
22+
return [
23+
__DIR__.'/../../../Resources/config/policies.yml',
24+
];
25+
}
26+
27+
public static function getTranslationMessages(): array
28+
{
29+
return [
30+
(new Message('role.policy.menu_manager.all_functions', 'menu_manager'))->setDesc('Menu Manager / All Functions'),
31+
(new Message('role.policy.menu_manager.list', 'menu_manager'))->setDesc('Menu Manager / Liste'),
32+
(new Message('role.policy.menu_manager.new', 'menu_manager'))->setDesc('Menu Manager / New'),
33+
(new Message('role.policy.menu_manager.edit', 'menu_manager'))->setDesc('Menu Manager / Edit'),
34+
(new Message('role.policy.menu_manager.delete', 'menu_manager'))->setDesc('Menu Manager / Delete'),
35+
(new Message('role.policy.menu_manager.view', 'menu_manager'))->setDesc('Menu Manager Log / View'),
36+
];
37+
}
38+
}

components/MenuManagerBundle/src/bundle/EzMenuManagerBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
namespace Novactive\EzMenuManagerBundle;
1414

1515
use Novactive\EzMenuManager\MenuItem\MenuItemTypeInterface;
16+
use Novactive\EzMenuManagerBundle\DependencyInjection\Security\Provider\MenuPolicyProvider;
1617
use Symfony\Component\DependencyInjection\ContainerBuilder;
1718
use Symfony\Component\HttpKernel\Bundle\Bundle;
1819

@@ -26,5 +27,6 @@ public function build(ContainerBuilder $container)
2627
parent::build($container);
2728
$container->registerForAutoconfiguration(MenuItemTypeInterface::class)
2829
->addTag('ezmenumanager.menuitemtype');
30+
$container->getExtension('ibexa')->addPolicyProvider(new MenuPolicyProvider());
2931
}
3032
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
menu_manager:
2+
list: ~
3+
new: ~
4+
view: ~
5+
edit: ~
6+
delete: ~

components/MenuManagerBundle/src/bundle/Resources/translations/menu_manager.en.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,9 @@ menu_item:
5252
save_container: Save folder
5353
cancel: Cancel
5454
actions.apply_btn: Apply
55+
role.policy.menu_manager: Menu Manager
56+
role.policy.menu_manager.all_functions: Menu Manager / Toutes les fonctions
57+
role.policy.menu_manager.list: Menu Manager / Liste
58+
role.policy.menu_manager.view: Menu Manager / View
59+
role.policy.menu_manager.edit: Menu Manager / Edit
60+
role.policy.menu_manager.new: Menu Manager / New

0 commit comments

Comments
 (0)