1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Alpixel\Bundle\CMSBundle\Listener; |
4
|
|
|
|
5
|
|
|
use Symfony\Component\HttpFoundation\Cookie; |
6
|
|
|
use Symfony\Component\HttpFoundation\RequestStack; |
7
|
|
|
use Symfony\Component\HttpKernel\Event\FilterResponseEvent; |
8
|
|
|
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage; |
9
|
|
|
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker; |
10
|
|
|
|
11
|
|
|
class KernelListener |
12
|
|
|
{ |
13
|
|
|
private $requestStack; |
14
|
|
|
private $tokenStorage; |
15
|
|
|
private $secret; |
16
|
|
|
private $authorizationChecker; |
17
|
|
|
|
18
|
|
|
public function __construct(RequestStack $requestStack, TokenStorage $tokenStorage, AuthorizationChecker $authorizationChecker, $secret) |
19
|
|
|
{ |
20
|
|
|
$this->tokenStorage = $tokenStorage; |
21
|
|
|
$this->secret = $secret; |
22
|
|
|
$this->authorizationChecker = $authorizationChecker; |
23
|
|
|
$this->requestStack = $requestStack; |
24
|
|
|
} |
25
|
|
|
|
26
|
|
|
public function onKernelResponse(FilterResponseEvent $event) |
27
|
|
|
{ |
28
|
|
|
$response = $event->getResponse(); |
29
|
|
|
$request = $this->requestStack->getMasterRequest(); |
30
|
|
|
$route = $request->attributes->get('_route'); |
31
|
|
|
$cookies = $request->cookies; |
32
|
|
|
|
33
|
|
|
$token = $this->tokenStorage->getToken(); |
34
|
|
|
|
35
|
|
|
if ($token !== null && $this->authorizationChecker->isGranted('ROLE_ADMIN')) { |
36
|
|
|
$userSecret = $this->tokenStorage->getToken()->getUser()->getSalt(); |
37
|
|
|
$cookie = new Cookie('can_edit', hash('sha256', 'can_edit'.$this->secret.$userSecret), 0, '/', null, false, false); |
38
|
|
|
$response->headers->setCookie($cookie); |
39
|
|
|
} elseif (!in_array($route, ['_profiler', '_wdt']) && $cookies->has('can_edit2')) { |
40
|
|
|
$response->headers->clearCookie('can_edit', '/'); |
41
|
|
|
} |
42
|
|
|
} |
43
|
|
|
} |
44
|
|
|
|