Skip to content

Commit 05c8b6e

Browse files
authored
Merge pull request #18 from SimLibaud/sf5_twig3
Sf5 + Twig 3 compliant
2 parents cf34acc + 6240e76 commit 05c8b6e

8 files changed

Lines changed: 47 additions & 38 deletions

File tree

Event/AccessDeniedToRouteEvent.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77
namespace Sil\RouteSecurityBundle\Event;
88

9-
use Symfony\Component\EventDispatcher\Event;
9+
use Symfony\Contracts\EventDispatcher\Event;
1010
use Symfony\Component\HttpFoundation\Request;
1111
use Symfony\Component\Security\Core\User\UserInterface;
1212
use Symfony\Component\HttpFoundation\Response;

Listener/AccessControlListener.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use Sil\RouteSecurityBundle\Exception\LogicException;
1212
use Sil\RouteSecurityBundle\Security\AccessControl;
1313
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
14-
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
14+
use Symfony\Component\HttpKernel\Event\RequestEvent;
1515
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
1616
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
1717
use Symfony\Component\Security\Core\User\UserInterface;
@@ -33,9 +33,10 @@ public function __construct(AccessControl $accessControl, TokenStorageInterface
3333
}
3434

3535
/**
36-
* @param GetResponseEvent $event
36+
* @param RequestEvent $event
37+
* @return RequestEvent|void
3738
*/
38-
public function onKernelRequest(GetResponseEvent $event)
39+
public function onKernelRequest(RequestEvent $event)
3940
{
4041
$route = $event->getRequest()->attributes->get('_route');
4142

@@ -55,7 +56,7 @@ public function onKernelRequest(GetResponseEvent $event)
5556

5657
if (false === $this->accessControl->hasUserAccessToRoute($user, $route)) {
5758
$access_denied_event = new AccessDeniedToRouteEvent($user, $event->getRequest());
58-
$this->eventDispatcher->dispatch(AccessDeniedToRouteEvent::ON_ACCESS_DENIED_TO_ROUTE, $access_denied_event);
59+
$this->eventDispatcher->dispatch($access_denied_event, AccessDeniedToRouteEvent::ON_ACCESS_DENIED_TO_ROUTE);
5960

6061
if (true === $access_denied_event->hasResponse()) {
6162
$event->setResponse($access_denied_event->getResponse());

Resources/config/services.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
<service id="sil_route_security.access_control_listener" class="Sil\RouteSecurityBundle\Listener\AccessControlListener">
2929
<argument type="service" id="sil_route_security.access_control"></argument>
30-
<argument type="service" id="security.token_storage"></argument>
30+
<argument type="service" id="security.untracked_token_storage"></argument>
3131
<argument type="service" id="event_dispatcher"></argument>
3232
<tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="4"/>
3333
</service>

Tests/DependencyInjection/Compiler/DynamicServiceCompilerPassTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ public function testDefaultNamingStrategy()
1515
{
1616
$container = new ContainerBuilder();
1717
$container->setParameter('sil_route_security.naming_strategy', null);
18-
$container->register('sil_route_security.route_to_role_converter', $this->createMock(RouteToRoleConverter::class));
19-
$container->register('router', new \stdClass());
18+
$container->register('sil_route_security.route_to_role_converter', RouteToRoleConverter::class);
19+
$container->register('router', null);
2020
$container
2121
->register('sil_route_security.access_control')
2222
->addArgument(new Reference('router'))
2323
->addArgument(new Reference('sil_route_security.route_to_role_converter'))
2424
;
2525
$container
26-
->register('sil_route_security.route_security_tools', new \stdClass())
26+
->register('sil_route_security.route_security_tools', null)
2727
->addArgument(new Reference('sil_route_security.access_control'))
2828
->addArgument(new Reference('sil_route_security.route_to_role_converter'))
2929
;
@@ -39,16 +39,16 @@ public function testOverridesNamingStrategy()
3939
{
4040
$container = new ContainerBuilder();
4141
$container->setParameter('sil_route_security.naming_strategy', 'my_own_naming_strategy');
42-
$container->register('my_own_naming_strategy', $this->createMock(NamingStrategyInterface::class));
43-
$container->register('sil_route_security.route_to_role_converter', $this->createMock(RouteToRoleConverter::class));
44-
$container->register('router', new \stdClass());
42+
$container->register('my_own_naming_strategy', NamingStrategyInterface::class);
43+
$container->register('sil_route_security.route_to_role_converter', RouteToRoleConverter::class);
44+
$container->register('router', null);
4545
$container
4646
->register('sil_route_security.access_control')
4747
->addArgument(new Reference('router'))
4848
->addArgument(new Reference('sil_route_security.route_to_role_converter'))
4949
;
5050
$container
51-
->register('sil_route_security.route_security_tools', new \stdClass())
51+
->register('sil_route_security.route_security_tools', null)
5252
->addArgument(new Reference('sil_route_security.access_control'))
5353
->addArgument(new Reference('sil_route_security.route_to_role_converter'))
5454
;

Tests/Listener/AccessControlListenerTest.php

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
1313
use Symfony\Component\HttpFoundation\ParameterBag;
1414
use Symfony\Component\HttpFoundation\Request;
15-
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
15+
use Symfony\Component\HttpKernel\Event\RequestEvent;
1616
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
1717
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
1818
use Symfony\Component\Security\Core\User\UserInterface;
@@ -27,7 +27,7 @@ public function testWhenAccessControlIsDisabled()
2727
->willReturn(false);
2828
$tokenStorage = $this->createMock(TokenStorageInterface::class);
2929
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
30-
$event = $this->mockGetResponseEvent();
30+
$event = $this->mockRequestEvent();
3131

3232
$accessControlListener = new AccessControlListener($accessControl, $tokenStorage, $eventDispatcher);
3333
$accessControlListener->onKernelRequest($event);
@@ -47,7 +47,7 @@ public function testWithNonSecureRoute()
4747
->willReturn(false);
4848
$tokenStorage = $this->createMock(TokenStorageInterface::class);
4949
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
50-
$event = $this->mockGetResponseEvent('non_secure_route');
50+
$event = $this->mockRequestEvent('non_secure_route');
5151

5252
$accessControlListener = new AccessControlListener($accessControl, $tokenStorage, $eventDispatcher);
5353
$accessControlListener->onKernelRequest($event);
@@ -70,7 +70,7 @@ public function testWithEmptyTokenStorage()
7070
->method('getToken')
7171
->willReturn(null);
7272
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
73-
$event = $this->mockGetResponseEvent('secure_route');
73+
$event = $this->mockRequestEvent('secure_route');
7474

7575
$accessControlListener = new AccessControlListener($accessControl, $tokenStorage, $eventDispatcher);
7676
$this->expectException(LogicException::class);
@@ -96,7 +96,7 @@ public function testWithInvalidTokenStorage()
9696
->method('getToken')
9797
->willReturn($token);
9898
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
99-
$event = $this->mockGetResponseEvent('secure_route');
99+
$event = $this->mockRequestEvent('secure_route');
100100

101101
$accessControlListener = new AccessControlListener($accessControl, $tokenStorage, $eventDispatcher);
102102
$this->expectException(LogicException::class);
@@ -118,7 +118,7 @@ public function testWithCorrectAccessForUser()
118118
->willReturn(true);
119119
$tokenStorage = $this->mockTokenStorage();
120120
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
121-
$event = $this->mockGetResponseEvent('secure_route');
121+
$event = $this->mockRequestEvent('secure_route');
122122

123123
$accessControlListener = new AccessControlListener($accessControl, $tokenStorage, $eventDispatcher);
124124
$this->assertNull($accessControlListener->onKernelRequest($event));
@@ -139,7 +139,7 @@ public function testWithIncorrectAccessForUser()
139139
->willReturn(false);
140140
$tokenStorage = $this->mockTokenStorage();
141141
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
142-
$event = $this->mockGetResponseEvent('secure_route');
142+
$event = $this->mockRequestEvent('secure_route');
143143

144144
$accessControlListener = new AccessControlListener($accessControl, $tokenStorage, $eventDispatcher);
145145
$this->expectException(AccessDeniedException::class);
@@ -160,24 +160,25 @@ public function testWithIncorrectAccessForUserAndCustomResponse()
160160
->method('hasUserAccessToRoute')
161161
->willReturn(false);
162162
$tokenStorage = $this->mockTokenStorage();
163-
$event = $this->mockGetResponseEvent('secure_route');
163+
$event = $this->mockRequestEvent('secure_route');
164164
$eventDispatcher = $this->createMock(EventDispatcherInterface::class);
165165
$response = new Response('Custom Response');
166166
$eventDispatcher
167167
->expects($this->once())
168168
->method('dispatch')
169-
->with(AccessDeniedToRouteEvent::ON_ACCESS_DENIED_TO_ROUTE, $this->isInstanceOf(AccessDeniedToRouteEvent::class))
170-
->will($this->returnCallback(function ($name, $access_denied_event) use ($response) {
169+
->with($this->isInstanceOf(AccessDeniedToRouteEvent::class), AccessDeniedToRouteEvent::ON_ACCESS_DENIED_TO_ROUTE)
170+
->will($this->returnCallback(function ($access_denied_event, $name) use ($response) {
171171
$access_denied_event->setResponse($response);
172+
return $access_denied_event;
172173
}));
173174

174175
$accessControlListener = new AccessControlListener($accessControl, $tokenStorage, $eventDispatcher);
175-
$this->assertInstanceOf(GetResponseEvent::class, $accessControlListener->onKernelRequest($event));
176+
$this->assertInstanceOf(RequestEvent::class, $accessControlListener->onKernelRequest($event));
176177
}
177178

178-
protected function mockGetResponseEvent($route = null)
179+
protected function mockRequestEvent($route = null)
179180
{
180-
$event = $this->createMock(GetResponseEvent::class);
181+
$event = $this->createMock(RequestEvent::class);
181182
$request = $this->createMock(Request::class);
182183
$parameterBag = $this->createMock(ParameterBag::class);
183184
$parameterBag

Twig/RouteSecurityExtension.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@
77
namespace Sil\RouteSecurityBundle\Twig;
88

99
use Sil\RouteSecurityBundle\Security\AccessControl;
10+
use Twig\Extension\AbstractExtension;
11+
use Twig\TwigFunction;
1012

1113
/**
1214
* Class RouteSecurityExtension.
1315
*/
14-
class RouteSecurityExtension extends \Twig_Extension
16+
class RouteSecurityExtension extends AbstractExtension
1517
{
1618
private $accessControl;
1719

@@ -23,9 +25,9 @@ public function __construct(AccessControl $accessControl)
2325
public function getFunctions()
2426
{
2527
return [
26-
new \Twig_SimpleFunction('hasUserAccessToRoute', [$this->accessControl, 'hasUserAccessToRoute']),
27-
new \Twig_SimpleFunction('hasUserAccessToRoutes', [$this->accessControl, 'hasUserAccessToRoutes']),
28-
new \Twig_SimpleFunction('hasUserAccessAtLeastOneRoute', [$this->accessControl, 'hasUserAccessAtLeastOneRoute']),
28+
new TwigFunction('hasUserAccessToRoute', [$this->accessControl, 'hasUserAccessToRoute']),
29+
new TwigFunction('hasUserAccessToRoutes', [$this->accessControl, 'hasUserAccessToRoutes']),
30+
new TwigFunction('hasUserAccessAtLeastOneRoute', [$this->accessControl, 'hasUserAccessAtLeastOneRoute']),
2931
];
3032
}
3133
}

WebProfiler/RouteSecurityTools.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ public function __construct(AccessControl $accessControl, NamingStrategyInterfac
2929
/**
3030
* @param Request $request
3131
* @param Response $response
32-
* @param \Exception|null $exception
32+
* @param \Throwable|null $exception
3333
*/
34-
public function collect(Request $request, Response $response, \Exception $exception = null)
34+
public function collect(Request $request, Response $response, \Throwable $exception = null)
3535
{
3636
$this->data['is_access_control_enable'] = $this->accessControl->isEnable();
3737
$route = $request->get('_route');

composer.json

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
}
1212
],
1313
"require": {
14-
"php": "~5.6 || ~7.0",
15-
"symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0",
16-
"symfony/security": "^2.7 || ^3.0 || ^4.0",
17-
"symfony/yaml": "^2.7 || ^3.0 || ^4.0",
18-
"symfony/expression-language": "^2.7 || ^3.0 || ^4.0",
19-
"twig/twig": "^1.28 || ^2.0"
14+
"php": "~7.2",
15+
"symfony/framework-bundle": "^5.0",
16+
"symfony/security-core": "^5.0",
17+
"symfony/yaml": "^5.0",
18+
"symfony/expression-language": "^5.0",
19+
"twig/twig": "^3.0"
2020
},
2121
"require-dev": {
2222
"phpunit/phpunit": "^5.7 || ^6.0"
@@ -28,5 +28,10 @@
2828
"exclude-from-classmap": [
2929
"/Tests/"
3030
]
31+
},
32+
"scripts": {
33+
"test": [
34+
"vendor/bin/phpunit"
35+
]
3136
}
3237
}

0 commit comments

Comments
 (0)