Skip to content

Commit db62373

Browse files
committed
Update
1 parent 17f9601 commit db62373

File tree

5 files changed

+71
-13
lines changed

5 files changed

+71
-13
lines changed

Extension/LlamaMenuExtension.php

+10-3
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,20 @@ public function menuRender($menu, $options = array())
3030
throw new \Exception(sprintf('Menu class "%s" does not exist.', $className));
3131
}
3232
$menu = new $className($options);
33-
} elseif ($options) {
34-
$menu->setOptions($options);
33+
}
34+
35+
if ($options)
36+
{
37+
foreach ($options as $k => $v)
38+
{
39+
$menu->setOption($k, $v);
40+
}
3541
}
3642
return $this->menuService->renderView($menu);
3743
}
3844

39-
public function getName() {
45+
public function getName()
46+
{
4047
return 'panzer_llama_llama_menu_extension';
4148
}
4249
}

Model/LlamaMenu.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
class LlamaMenu
55
{
66
protected $elements = array();
7-
protected $options;
7+
protected $options = array();
88

99
public function __construct(array $options = array())
1010
{
@@ -29,6 +29,12 @@ public function getOptions()
2929
{
3030
return $this->options;
3131
}
32+
33+
public function setOption($name, $value)
34+
{
35+
$this->options[$name] = $value;
36+
return $this;
37+
}
3238

3339
public function getOption($name)
3440
{

Model/LlamaMenuElement.php

+26-2
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ class LlamaMenuElement
1313
private $level = 1;
1414
private $menu;
1515
private $parent;
16+
private $required_permissions;
1617

1718
private $classes = array();
1819
private $elements = array();
1920

2021
private $isRouted = false;
2122
private $isActive = false;
2223
private $isDisabled = false;
23-
24+
private $isRendered = true;
25+
2426
public function setName($v)
2527
{
2628
$this->name = $v;
@@ -254,5 +256,27 @@ public function getClasses()
254256
$this->addClass($this->getMenu()->getOption('disabledClass'));
255257
}
256258
return $this->classes;
257-
}
259+
}
260+
261+
public function setRequiredPermissions($requiredFlag)
262+
{
263+
$this->required_permissions = $requiredFlag;
264+
return $this;
265+
}
266+
267+
public function getRequiredPermissions()
268+
{
269+
return $this->required_permissions;
270+
}
271+
272+
public function setIsRendered($v)
273+
{
274+
$this->isRendered = $v;
275+
return $this;
276+
}
277+
278+
public function getIsRendered()
279+
{
280+
return $this->isRendered;
281+
}
258282
}

Resources/config/services.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
services:
22
llama.menu.service:
33
class: PanzerLlama\LlamaMenuBundle\Service\LlamaMenuService
4-
arguments: ["@twig", "@router", "@request_stack"]
4+
arguments:
5+
- "@twig"
6+
- "@router"
7+
- "@request_stack"
8+
- "@security.authorization_checker"
9+
- "@security.token_storage"
510

611
twig.llama.menu.extension:
712
class: PanzerLlama\LlamaMenuBundle\Extension\LlamaMenuExtension

Service/LlamaMenuService.php

+22-6
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
<?php
22
namespace PanzerLlama\LlamaMenuBundle\Service;
33

4+
use AdminBundle\Entity\User;
45
use Symfony\Bundle\FrameworkBundle\Routing\Router;
56
use Symfony\Component\HttpFoundation\RequestStack;
7+
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
8+
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
69

710
use Twig_Environment as Twig;
811

@@ -15,13 +18,17 @@ class LlamaMenuService
1518
private $twig;
1619
private $router;
1720
private $requestStack;
18-
//private $security;
21+
private $authorizationChecker;
22+
private $tokenStorage;
1923

20-
public function __construct(Twig $twig, Router $router, RequestStack $requestStack)
24+
public function __construct(Twig $twig, Router $router, RequestStack $requestStack, AuthorizationCheckerInterface $authorizationChecker, TokenStorage $tokenStorage)
2125
{
22-
$this->twig = $twig;
23-
$this->router = $router;
24-
$this->requestStack = $requestStack;
26+
$this->twig = $twig;
27+
$this->router = $router;
28+
$this->requestStack = $requestStack;
29+
$this->authorizationChecker = $authorizationChecker;
30+
$this->tokenStorage = $tokenStorage;
31+
$this->user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
2532
}
2633

2734
public function renderView(LlamaMenu $menu)
@@ -31,7 +38,8 @@ public function renderView(LlamaMenu $menu)
3138
}
3239

3340
private function prepareMenu(LlamaMenu $menu, $route)
34-
{
41+
{
42+
/** @var LlamaMenuElement $e */
3543
foreach ($menu->getElements() as $e)
3644
{
3745
$this->prepareMenuElement($e, $route);
@@ -40,6 +48,14 @@ private function prepareMenu(LlamaMenu $menu, $route)
4048

4149
private function prepareMenuElement(LlamaMenuElement $menuElement, $route)
4250
{
51+
if ($menuElement->getRequiredPermissions())
52+
{
53+
if (!$this->user instanceof User || $this->authorizationChecker->isGranted($menuElement->getRequiredPermissions(), $this->user) === false)
54+
{
55+
$menuElement->setIsRendered(false);
56+
}
57+
}
58+
4359
$menuElement->addClass(sprintf('level-%s', $menuElement->getLevel()));
4460

4561
if ($menuElement->hasRoute($route))

0 commit comments

Comments
 (0)