Skip to content

Commit 4cda97b

Browse files
Add role policies
1 parent ba04780 commit 4cda97b

File tree

6 files changed

+86
-4
lines changed

6 files changed

+86
-4
lines changed

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

Lines changed: 23 additions & 4 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,24 @@ 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
57-
) {
58+
EntityManagerInterface $em,
59+
ConfigResolverInterface $configResolver,
60+
PermissionResolver $permissionResolver
61+
)
62+
{
5863
$this->translator = $translator;
5964
$this->notificationHandler = $notificationHandler;
6065
$this->em = $em;
6166
$this->configResolver = $configResolver;
67+
$this->permissionResolver = $permissionResolver;
6268
}
6369

6470
/**
@@ -72,6 +78,9 @@ public function __construct(
7278
*/
7379
public function listAction(Request $request, $page = 1)
7480
{
81+
if (!$this->permissionResolver->hasAccess('menu_manager', 'list')) {
82+
throw new UnauthorizedException('menu_manager', 'list', []);
83+
}
7584
$queryBuilder = $this->em->createQueryBuilder()
7685
->select('m')
7786
->from(Menu::class, 'm')
@@ -142,6 +151,9 @@ protected function getMenusIds($menus)
142151
*/
143152
public function newAction(Request $request)
144153
{
154+
if (!$this->permissionResolver->hasAccess('menu_manager', 'new')) {
155+
throw new UnauthorizedException('menu_manager', 'new', []);
156+
}
145157
$menu = new Menu();
146158
$menu->setRootLocationId(
147159
$this->configResolver->getParameter('content.tree_root.location_id')
@@ -157,6 +169,10 @@ public function newAction(Request $request)
157169
*/
158170
public function editAction(Request $request, Menu $menu)
159171
{
172+
if (!$this->permissionResolver->hasAccess('menu_manager', 'edit')) {
173+
throw new UnauthorizedException('menu_manager', 'edit', []);
174+
}
175+
160176
$form = $this->createForm(MenuType::class, $menu);
161177
$form->handleRequest($request);
162178
if ($form->isSubmitted() && $form->isValid()) {
@@ -187,6 +203,9 @@ public function editAction(Request $request, Menu $menu)
187203
*/
188204
public function deleteAction(Request $request)
189205
{
206+
if (!$this->permissionResolver->hasAccess('menu_manager', 'delete')) {
207+
throw new UnauthorizedException('menu_manager', 'delete', []);
208+
}
190209
$form = $this->createForm(MenuDeleteType::class);
191210
$form->handleRequest($request);
192211

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: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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'))
31+
->setDesc('Menu Manager / All Functions'),
32+
(new Message('role.policy.menu_manager.list', 'menu_manager'))->setDesc('Menu Manager / Liste'),
33+
(new Message('role.policy.menu_manager.new', 'menu_manager'))->setDesc('Menu Manager / New'),
34+
(new Message('role.policy.menu_manager.edit', 'menu_manager'))->setDesc('Menu Manager / Edit'),
35+
(new Message('role.policy.menu_manager.delete', 'menu_manager'))->setDesc('Menu Manager / Delete'),
36+
(new Message('role.policy.menu_manager.view', 'menu_manager'))->setDesc('Menu Manager Log / View'),
37+
];
38+
}
39+
}

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)