Skip to content

Commit c77b192

Browse files
committed
Merge pull request #48 from rstrash/security-manager-interface
Introducing SecurityManagerInterface for custom vote() implementations
2 parents eab4a00 + b98633f commit c77b192

8 files changed

Lines changed: 69 additions & 24 deletions

File tree

Component/Authorisation/SecurityManager.php

100644100755
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
* @link https://github.com/codeconsortium/CCDNUserSecurityBundle
2828
*
2929
*/
30-
class SecurityManager
30+
class SecurityManager implements SecurityManagerInterface
3131
{
3232
/**
3333
*
@@ -64,15 +64,10 @@ class SecurityManager
6464
*/
6565
protected $blockPages;
6666

67-
const ACCESS_ALLOWED = 0;
68-
const ACCESS_DENIED_DEFER = 1;
69-
const ACCESS_DENIED_BLOCK = 2;
70-
7167
/**
7268
*
7369
* @access public
7470
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
75-
* @param \Symfony\Bundle\FrameworkBundle\Routing\Router $router
7671
* @param \CCDNUser\SecurityBundle\Component\Authentication\Tracker\LoginFailureTracker $loginFailureTracker
7772
* @param array $routeLogin
7873
* @param array $forceAccountRecovery
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the CCDNUser SecurityBundle
5+
*
6+
* (c) CCDN (c) CodeConsortium <http://www.codeconsortium.com/>
7+
*
8+
* Available on github <http://www.github.com/codeconsortium/>
9+
*
10+
* For the full copyright and license information, please view the LICENSE
11+
* file that was distributed with this source code.
12+
*/
13+
14+
namespace CCDNUser\SecurityBundle\Component\Authorisation;
15+
16+
use Symfony\Component\HttpFoundation\RequestStack;
17+
use CCDNUser\SecurityBundle\Component\Authentication\Tracker\LoginFailureTracker;
18+
19+
interface SecurityManagerInterface
20+
{
21+
const ACCESS_ALLOWED = 0;
22+
const ACCESS_DENIED_DEFER = 1;
23+
const ACCESS_DENIED_BLOCK = 2;
24+
25+
/**
26+
* Constructor
27+
*
28+
* @access public
29+
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
30+
* @param \CCDNUser\SecurityBundle\Component\Authentication\Tracker\LoginFailureTracker $loginFailureTracker
31+
* @param array $routeLogin
32+
* @param array $forceAccountRecovery
33+
* @param array $blockPages
34+
*/
35+
public function __construct(RequestStack $requestStack, LoginFailureTracker $loginFailureTracker, $routeLogin, $forceAccountRecovery, $blockPages);
36+
37+
/**
38+
* @access public
39+
* @return int
40+
*/
41+
public function vote();
42+
}

Component/Authorisation/Voter/ClientLoginVoter.php

100644100755
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
namespace CCDNUser\SecurityBundle\Component\Authorisation\Voter;
1515

16+
use CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface;
1617
use Symfony\Component\Security\Core\Authorization\Voter\VoterInterface;
1718
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
1819

@@ -32,16 +33,16 @@ class ClientLoginVoter implements VoterInterface
3233
/**
3334
*
3435
* @access protected
35-
* @var \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager $securityManager
36+
* @var \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface $securityManager
3637
*/
3738
protected $securityManager;
3839

3940
/**
4041
*
4142
* @access public
42-
* @param \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager $loginFailureTracker
43+
* @param \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface $securityManager
4344
*/
44-
public function __construct($securityManager)
45+
public function __construct(SecurityManagerInterface $securityManager)
4546
{
4647
$this->securityManager = $securityManager;
4748
}

Component/Listener/BlockingLoginListener.php

100644100755
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313

1414
namespace CCDNUser\SecurityBundle\Component\Listener;
1515

16-
use CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager;
16+
use CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface;
1717
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
18-
use Symfony\Component\HttpFoundation\RedirectResponse;
1918

2019
/**
2120
*
@@ -33,7 +32,7 @@ class BlockingLoginListener
3332
/**
3433
*
3534
* @access protected
36-
* @var \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager $securityManager
35+
* @var \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface $securityManager
3736
*/
3837
protected $securityManager;
3938

@@ -45,11 +44,10 @@ class BlockingLoginListener
4544
/**
4645
*
4746
* @access public
48-
* @param \Symfony\Component\Routing\RouterInterface $router
49-
* @param \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager $loginFailureTracker
47+
* @param \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface $securityManager
5048
* @param \CCDNUser\SecurityBundle\Component\Listener\AccessDeniedExceptionFactoryInterface $exceptionFactory
5149
*/
52-
public function __construct(SecurityManager $securityManager, AccessDeniedExceptionFactoryInterface $exceptionFactory)
50+
public function __construct(SecurityManagerInterface $securityManager, AccessDeniedExceptionFactoryInterface $exceptionFactory)
5351
{
5452
$this->securityManager = $securityManager;
5553
$this->exceptionFactory = $exceptionFactory;

Component/Listener/DeferLoginListener.php

100644100755
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace CCDNUser\SecurityBundle\Component\Listener;
44

5-
use CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager;
5+
use CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface;
66
use Symfony\Component\HttpFoundation\RedirectResponse;
77
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
88
use Symfony\Component\HttpKernel\HttpKernelInterface;
@@ -27,19 +27,19 @@ class DeferLoginListener
2727
/**
2828
*
2929
* @access protected
30-
* @var \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager $securityManager
30+
* @var \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface $securityManager
3131
*/
3232
protected $securityManager;
3333

3434
/**
3535
*
3636
* @access public
37-
* @param \Symfony\Component\Routing\RouterInterface $router
38-
* @param \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager $securityManager
39-
* @param array $forceAccountRecovery
37+
* @param \Symfony\Component\Routing\RouterInterface $router
38+
* @param \CCDNUser\SecurityBundle\Component\Authorisation\SecurityManagerInterface $securityManager
39+
* @param array $forceAccountRecovery
4040
*
4141
*/
42-
public function __construct(RouterInterface $router, SecurityManager $securityManager, array $forceAccountRecovery)
42+
public function __construct(RouterInterface $router, SecurityManagerInterface $securityManager, array $forceAccountRecovery)
4343
{
4444
$this->router = $router;
4545
$this->securityManager = $securityManager;
@@ -52,9 +52,10 @@ public function onKernelRequest(GetResponseEvent $event)
5252
return;
5353
}
5454

55-
$result = $this->securityManager->vote();
55+
$securityManager = $this->securityManager; // Avoid the silly cryptic error 'T_PAAMAYIM_NEKUDOTAYIM'
56+
$result = $securityManager->vote();
5657

57-
if ($result === SecurityManager::ACCESS_DENIED_DEFER) {
58+
if ($result === $securityManager::ACCESS_DENIED_DEFER) {
5859
$event->stopPropagation();
5960

6061
$redirectUrl = $this->router->generate(

DependencyInjection/CCDNUserSecurityExtension.php

100644100755
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ private function getComponentSection(ContainerBuilder $container, $config)
160160
$container->setParameter('ccdn_user_security.component.authentication.handler.login_failure_handler.class', $config['component']['authentication']['handler']['login_failure_handler']['class']);
161161
$container->setParameter('ccdn_user_security.component.authentication.tracker.login_failure_tracker.class', $config['component']['authentication']['tracker']['login_failure_tracker']['class']);
162162

163+
$container->setParameter('ccdn_user_security.component.authorisation.security_manager.class', $config['component']['authorisation']['security_manager']['class']);
163164
$container->setParameter('ccdn_user_security.component.authorisation.voter.client_login_voter.class', $config['component']['authorisation']['voter']['client_login_voter']['class']);
164165

165166
$container->setParameter('ccdn_user_security.component.listener.blocking_login_listener.class', $config['component']['listener']['blocking_login_listener']['class']);

DependencyInjection/Configuration.php

100644100755
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,13 @@ private function addComponentSection(ArrayNodeDefinition $node)
305305
->addDefaultsIfNotSet()
306306
->canBeUnset()
307307
->children()
308+
->arrayNode('security_manager')
309+
->addDefaultsIfNotSet()
310+
->canBeUnset()
311+
->children()
312+
->scalarNode('class')->defaultValue('CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager')->end()
313+
->end()
314+
->end()
308315
->arrayNode('voter')
309316
->addDefaultsIfNotSet()
310317
->canBeUnset()

Resources/config/services/components.yml

100644100755
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ services:
2222
# Access Decision Manager
2323
#
2424
ccdn_user_security.component.authorisation.security_manager:
25-
class: 'CCDNUser\SecurityBundle\Component\Authorisation\SecurityManager'
25+
class: %ccdn_user_security.component.authorisation.security_manager.class%
2626
arguments:
2727
- @request_stack
2828
- @ccdn_user_security.component.authentication.tracker.login_failure_tracker

0 commit comments

Comments
 (0)