1
1
<?php
2
2
namespace PanzerLlama \LlamaMenuBundle \Service ;
3
3
4
+ use AdminBundle \Entity \User ;
4
5
use Symfony \Bundle \FrameworkBundle \Routing \Router ;
5
6
use Symfony \Component \HttpFoundation \RequestStack ;
7
+ use Symfony \Component \Security \Core \Authentication \Token \Storage \TokenStorage ;
8
+ use Symfony \Component \Security \Core \Authorization \AuthorizationCheckerInterface ;
6
9
7
10
use Twig_Environment as Twig ;
8
11
@@ -15,13 +18,17 @@ class LlamaMenuService
15
18
private $ twig ;
16
19
private $ router ;
17
20
private $ requestStack ;
18
- //private $security;
21
+ private $ authorizationChecker ;
22
+ private $ tokenStorage ;
19
23
20
- public function __construct (Twig $ twig , Router $ router , RequestStack $ requestStack )
24
+ public function __construct (Twig $ twig , Router $ router , RequestStack $ requestStack, AuthorizationCheckerInterface $ authorizationChecker , TokenStorage $ tokenStorage )
21
25
{
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 ;
25
32
}
26
33
27
34
public function renderView (LlamaMenu $ menu )
@@ -31,7 +38,8 @@ public function renderView(LlamaMenu $menu)
31
38
}
32
39
33
40
private function prepareMenu (LlamaMenu $ menu , $ route )
34
- {
41
+ {
42
+ /** @var LlamaMenuElement $e */
35
43
foreach ($ menu ->getElements () as $ e )
36
44
{
37
45
$ this ->prepareMenuElement ($ e , $ route );
@@ -40,6 +48,14 @@ private function prepareMenu(LlamaMenu $menu, $route)
40
48
41
49
private function prepareMenuElement (LlamaMenuElement $ menuElement , $ route )
42
50
{
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
+
43
59
$ menuElement ->addClass (sprintf ('level-%s ' , $ menuElement ->getLevel ()));
44
60
45
61
if ($ menuElement ->hasRoute ($ route ))
0 commit comments