diff options
author | Fabien Potencier <fabien.potencier@gmail.com> | 2015-03-24 18:09:17 +0100 |
---|---|---|
committer | Fabien Potencier <fabien.potencier@gmail.com> | 2015-03-24 18:09:17 +0100 |
commit | 2e43dea46f12839ed7131d459390c5bcf9f4cb77 (patch) | |
tree | 515067365b0483bc2bb6b90f082e87604fea7bc4 | |
parent | 4ba88d7477d5158c294d160c5660e8219a3485c0 (diff) | |
parent | 48526dc543e7776f2f4ac3f22d65a27cc3b7d911 (diff) | |
download | symfony-security-2e43dea46f12839ed7131d459390c5bcf9f4cb77.zip symfony-security-2e43dea46f12839ed7131d459390c5bcf9f4cb77.tar.gz symfony-security-2e43dea46f12839ed7131d459390c5bcf9f4cb77.tar.bz2 |
Merge branch '2.7'
* 2.7: (55 commits)
CS: fix some license headers
CS: Ensure there is no code on the same line as the PHP open tag and it is followed by a blankline
Improve triggering of the deprecation error
[SecurityBundle] Fix typos in LogoutUrlHelper
[VarDumper] add caster for MongoCursor objects
make it possible to dump inlined services to XML
[VarDumper] Fixed notice when Exchange is mocked
[Translation] keep old array structure of resourcesFiles to avoid BC.
removed deprecated notices that make the tests fail
use visited lookup with reference to gain performance
[VarDumper] with-er interface for Cloner\Data
Replace GET parameters when changed
tweaked phpdocs
[Process] Fix outdated Process->start() docblock
prevent inlining service configurators
Improve entropy of generated salt
Complete the removal of API versions in the validator component
[Validator] deprecated API version
Removed 2.5 bc layer
[SecurityBundle] UserPasswordEncoderCommand: fix help arguments order.
...
Conflicts:
CHANGELOG-2.3.md
CHANGELOG-2.6.md
src/Symfony/Bridge/Doctrine/Form/Type/DoctrineType.php
src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperDivLayoutTest.php
src/Symfony/Bundle/FrameworkBundle/Tests/Templating/Helper/FormHelperTableLayoutTest.php
src/Symfony/Bundle/FrameworkBundle/composer.json
src/Symfony/Bundle/SecurityBundle/composer.json
src/Symfony/Component/Console/Helper/DialogHelper.php
src/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php
src/Symfony/Component/Form/ResolvedFormType.php
src/Symfony/Component/Routing/Matcher/Dumper/ApacheMatcherDumper.php
-rw-r--r-- | Acl/Domain/Acl.php | 1 | ||||
-rw-r--r-- | Acl/Exception/Exception.php | 2 | ||||
-rw-r--r-- | Acl/Permission/AbstractMaskBuilder.php | 85 | ||||
-rw-r--r-- | Acl/Permission/BasicPermissionMap.php | 10 | ||||
-rw-r--r-- | Acl/Permission/MaskBuilder.php | 76 | ||||
-rw-r--r-- | Acl/Permission/MaskBuilderInterface.php | 75 | ||||
-rw-r--r-- | Acl/Permission/MaskBuilderRetrievalInterface.php | 25 | ||||
-rw-r--r-- | Acl/Tests/Dbal/AclProviderBenchmarkTest.php | 6 | ||||
-rw-r--r-- | Acl/Tests/Dbal/MutableAclProviderTest.php | 4 | ||||
-rw-r--r-- | CHANGELOG.md | 3 | ||||
-rw-r--r-- | Core/Authentication/Provider/DaoAuthenticationProvider.php | 2 | ||||
-rw-r--r-- | Core/Tests/Authorization/AccessDecisionManagerTest.php | 4 | ||||
-rw-r--r-- | Http/RememberMe/RememberMeServicesInterface.php | 11 |
13 files changed, 215 insertions, 89 deletions
diff --git a/Acl/Domain/Acl.php b/Acl/Domain/Acl.php index 328f754..5649719 100644 --- a/Acl/Domain/Acl.php +++ b/Acl/Domain/Acl.php @@ -1,4 +1,5 @@ <?php + /* * This file is part of the Symfony package. * diff --git a/Acl/Exception/Exception.php b/Acl/Exception/Exception.php index a38c8ee..f1e1001 100644 --- a/Acl/Exception/Exception.php +++ b/Acl/Exception/Exception.php @@ -16,6 +16,6 @@ namespace Symfony\Component\Security\Acl\Exception; * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ -class Exception extends \Exception +class Exception extends \RuntimeException { } diff --git a/Acl/Permission/AbstractMaskBuilder.php b/Acl/Permission/AbstractMaskBuilder.php new file mode 100644 index 0000000..867d2e2 --- /dev/null +++ b/Acl/Permission/AbstractMaskBuilder.php @@ -0,0 +1,85 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Security\Acl\Permission; + +/** + * This abstract class implements nearly all the MaskBuilderInterface methods + */ +abstract class AbstractMaskBuilder implements MaskBuilderInterface +{ + /** + * @var int + */ + protected $mask; + + /** + * Constructor. + * + * @param int $mask optional; defaults to 0 + */ + public function __construct($mask = 0) + { + $this->set($mask); + } + + /** + * {@inheritdoc} + */ + public function set($mask) + { + if (!is_int($mask)) { + throw new \InvalidArgumentException('$mask must be an integer.'); + } + + $this->mask = $mask; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function get() + { + return $this->mask; + } + + /** + * {@inheritdoc} + */ + public function add($mask) + { + $this->mask |= $this->resolveMask($mask); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function remove($mask) + { + $this->mask &= ~$this->resolveMask($mask); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function reset() + { + $this->mask = 0; + + return $this; + } +} diff --git a/Acl/Permission/BasicPermissionMap.php b/Acl/Permission/BasicPermissionMap.php index 4e26c02..fa5437d 100644 --- a/Acl/Permission/BasicPermissionMap.php +++ b/Acl/Permission/BasicPermissionMap.php @@ -17,7 +17,7 @@ namespace Symfony\Component\Security\Acl\Permission; * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ -class BasicPermissionMap implements PermissionMapInterface +class BasicPermissionMap implements PermissionMapInterface, MaskBuilderRetrievalInterface { const PERMISSION_VIEW = 'VIEW'; const PERMISSION_EDIT = 'EDIT'; @@ -105,4 +105,12 @@ class BasicPermissionMap implements PermissionMapInterface { return isset($this->map[$permission]); } + + /** + * {@inheritdoc} + */ + public function getMaskBuilder() + { + return new MaskBuilder(); + } } diff --git a/Acl/Permission/MaskBuilder.php b/Acl/Permission/MaskBuilder.php index 5364c9b..3079800 100644 --- a/Acl/Permission/MaskBuilder.php +++ b/Acl/Permission/MaskBuilder.php @@ -42,7 +42,7 @@ namespace Symfony\Component\Security\Acl\Permission; * * @author Johannes M. Schmitt <schmittjoh@gmail.com> */ -class MaskBuilder +class MaskBuilder extends AbstractMaskBuilder { const MASK_VIEW = 1; // 1 << 0 const MASK_CREATE = 2; // 1 << 1 @@ -67,50 +67,6 @@ class MaskBuilder const OFF = '.'; const ON = '*'; - private $mask; - - /** - * Constructor. - * - * @param int $mask optional; defaults to 0 - * - * @throws \InvalidArgumentException - */ - public function __construct($mask = 0) - { - if (!is_int($mask)) { - throw new \InvalidArgumentException('$mask must be an integer.'); - } - - $this->mask = $mask; - } - - /** - * Adds a mask to the permission. - * - * @param mixed $mask - * - * @return MaskBuilder - * - * @throws \InvalidArgumentException - */ - public function add($mask) - { - $this->mask |= $this->getMask($mask); - - return $this; - } - - /** - * Returns the mask of this permission. - * - * @return int - */ - public function get() - { - return $this->mask; - } - /** * Returns a human-readable representation of the permission. * @@ -136,34 +92,6 @@ class MaskBuilder } /** - * Removes a mask from the permission. - * - * @param mixed $mask - * - * @return MaskBuilder - * - * @throws \InvalidArgumentException - */ - public function remove($mask) - { - $this->mask &= ~$this->getMask($mask); - - return $this; - } - - /** - * Resets the PermissionBuilder. - * - * @return MaskBuilder - */ - public function reset() - { - $this->mask = 0; - - return $this; - } - - /** * Returns the code for the passed mask. * * @param int $mask @@ -204,7 +132,7 @@ class MaskBuilder * * @throws \InvalidArgumentException */ - private function getMask($code) + public function resolveMask($code) { if (is_string($code)) { if (!defined($name = sprintf('static::MASK_%s', strtoupper($code)))) { diff --git a/Acl/Permission/MaskBuilderInterface.php b/Acl/Permission/MaskBuilderInterface.php new file mode 100644 index 0000000..ba41830 --- /dev/null +++ b/Acl/Permission/MaskBuilderInterface.php @@ -0,0 +1,75 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Security\Acl\Permission; + +/** + * This is the interface that must be implemented by mask builders. + */ +interface MaskBuilderInterface +{ + /** + * Set the mask of this permission + * + * @param int $mask + * + * @return MaskBuilderInterface + * @throws \InvalidArgumentException if $mask is not an integer + */ + public function set($mask); + + /** + * Returns the mask of this permission. + * + * @return int + */ + public function get(); + + /** + * Adds a mask to the permission. + * + * @param mixed $mask + * + * @return MaskBuilderInterface + * + * @throws \InvalidArgumentException + */ + public function add($mask); + + /** + * Removes a mask from the permission. + * + * @param mixed $mask + * + * @return MaskBuilderInterface + * + * @throws \InvalidArgumentException + */ + public function remove($mask); + + /** + * Resets the PermissionBuilder. + * + * @return MaskBuilderInterface + */ + public function reset(); + + /** + * Returns the mask for the passed code + * + * @param mixed $code + * + * @return int + * + * @throws \InvalidArgumentException + */ + public function resolveMask($code); +} diff --git a/Acl/Permission/MaskBuilderRetrievalInterface.php b/Acl/Permission/MaskBuilderRetrievalInterface.php new file mode 100644 index 0000000..7a99bca --- /dev/null +++ b/Acl/Permission/MaskBuilderRetrievalInterface.php @@ -0,0 +1,25 @@ +<?php + +/* + * This file is part of the Symfony package. + * + * (c) Fabien Potencier <fabien@symfony.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Security\Acl\Permission; + +/** + * Retrieves the MaskBuilder + */ +interface MaskBuilderRetrievalInterface +{ + /** + * Returns a new instance of the MaskBuilder used in the permissionMap + * + * @return MaskBuilderInterface + */ + public function getMaskBuilder(); +} diff --git a/Acl/Tests/Dbal/AclProviderBenchmarkTest.php b/Acl/Tests/Dbal/AclProviderBenchmarkTest.php index 46a695a..599b9c4 100644 --- a/Acl/Tests/Dbal/AclProviderBenchmarkTest.php +++ b/Acl/Tests/Dbal/AclProviderBenchmarkTest.php @@ -56,7 +56,7 @@ class AclProviderBenchmarkTest extends \PHPUnit_Framework_TestCase // get some random test object identities from the database $oids = array(); - $stmt = $this->con->executeQuery("SELECT object_identifier, class_type FROM acl_object_identities o INNER JOIN acl_classes c ON c.id = o.class_id ORDER BY RAND() LIMIT 25"); + $stmt = $this->con->executeQuery('SELECT object_identifier, class_type FROM acl_object_identities o INNER JOIN acl_classes c ON c.id = o.class_id ORDER BY RAND() LIMIT 25'); foreach ($stmt->fetchAll() as $oid) { $oids[] = new ObjectIdentity($oid['object_identifier'], $oid['class_type']); } @@ -66,7 +66,7 @@ class AclProviderBenchmarkTest extends \PHPUnit_Framework_TestCase $start = microtime(true); $provider->findAcls($oids); $time = microtime(true) - $start; - echo "Total Time: ".$time."s\n"; + echo 'Total Time: '.$time."s\n"; } /** @@ -77,7 +77,7 @@ class AclProviderBenchmarkTest extends \PHPUnit_Framework_TestCase { $sm = $this->con->getSchemaManager(); $sm->dropAndCreateDatabase('testdb'); - $this->con->exec("USE testdb"); + $this->con->exec('USE testdb'); // import the schema $schema = new Schema($options = $this->getOptions()); diff --git a/Acl/Tests/Dbal/MutableAclProviderTest.php b/Acl/Tests/Dbal/MutableAclProviderTest.php index 5ec23d3..edf64ba 100644 --- a/Acl/Tests/Dbal/MutableAclProviderTest.php +++ b/Acl/Tests/Dbal/MutableAclProviderTest.php @@ -478,7 +478,7 @@ class MutableAclProviderTest extends \PHPUnit_Framework_TestCase if (isset($aclData['parent_acl'])) { if (isset($aclIds[$aclData['parent_acl']])) { - $con->executeQuery("UPDATE acl_object_identities SET parent_object_identity_id = ".$aclIds[$aclData['parent_acl']]." WHERE id = ".$aclId); + $con->executeQuery('UPDATE acl_object_identities SET parent_object_identity_id = '.$aclIds[$aclData['parent_acl']].' WHERE id = '.$aclId); $con->executeQuery($this->callMethod($provider, 'getInsertObjectIdentityRelationSql', array($aclId, $aclIds[$aclData['parent_acl']]))); } else { $parentAcls[$aclId] = $aclData['parent_acl']; @@ -491,7 +491,7 @@ class MutableAclProviderTest extends \PHPUnit_Framework_TestCase throw new \InvalidArgumentException(sprintf('"%s" does not exist.', $name)); } - $con->executeQuery(sprintf("UPDATE acl_object_identities SET parent_object_identity_id = %d WHERE id = %d", $aclIds[$name], $aclId)); + $con->executeQuery(sprintf('UPDATE acl_object_identities SET parent_object_identity_id = %d WHERE id = %d', $aclIds[$name], $aclId)); $con->executeQuery($this->callMethod($provider, 'getInsertObjectIdentityRelationSql', array($aclId, $aclIds[$name]))); } diff --git a/CHANGELOG.md b/CHANGELOG.md index c44668e..052f883 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ CHANGELOG * added LogoutUrlGenerator * added the triggering of the `Symfony\Component\Security\Http\SecurityEvents::INTERACTIVE_LOGIN` in `Symfony\Component\Security\Http\Firewall\SimplePreAuthenticationListener` + * The MaskBuilder logic has been abstracted in the `Symfony\Component\Security\Acl\Permission\AbstractMaskBuilder` + and described in the `Symfony\Component\Security\Acl\Permission\MaskBuilderInterface` + * added interface `Symfony\Component\Security\Acl\Permission\MaskBuilderRetrievalInterface` 2.6.0 ----- diff --git a/Core/Authentication/Provider/DaoAuthenticationProvider.php b/Core/Authentication/Provider/DaoAuthenticationProvider.php index 4913be8..b7b4917 100644 --- a/Core/Authentication/Provider/DaoAuthenticationProvider.php +++ b/Core/Authentication/Provider/DaoAuthenticationProvider.php @@ -59,7 +59,7 @@ class DaoAuthenticationProvider extends UserAuthenticationProvider throw new BadCredentialsException('The credentials were changed from another session.'); } } else { - if ("" === ($presentedPassword = $token->getCredentials())) { + if ('' === ($presentedPassword = $token->getCredentials())) { throw new BadCredentialsException('The presented password cannot be empty.'); } diff --git a/Core/Tests/Authorization/AccessDecisionManagerTest.php b/Core/Tests/Authorization/AccessDecisionManagerTest.php index ae5894d..126bfe8 100644 --- a/Core/Tests/Authorization/AccessDecisionManagerTest.php +++ b/Core/Tests/Authorization/AccessDecisionManagerTest.php @@ -107,8 +107,8 @@ class AccessDecisionManagerTest extends \PHPUnit_Framework_TestCase $voter->expects($this->exactly(2)) ->method('vote') ->will($this->returnValueMap(array( - array($token, null, array("ROLE_FOO"), $vote1), - array($token, null, array("ROLE_BAR"), $vote2), + array($token, null, array('ROLE_FOO'), $vote1), + array($token, null, array('ROLE_BAR'), $vote2), ))) ; diff --git a/Http/RememberMe/RememberMeServicesInterface.php b/Http/RememberMe/RememberMeServicesInterface.php index a00dcef..7adb827 100644 --- a/Http/RememberMe/RememberMeServicesInterface.php +++ b/Http/RememberMe/RememberMeServicesInterface.php @@ -1,9 +1,4 @@ <?php -namespace Symfony\Component\Security\Http\RememberMe; - -use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpFoundation\Request; /* * This file is part of the Symfony package. @@ -14,6 +9,12 @@ use Symfony\Component\HttpFoundation\Request; * file that was distributed with this source code. */ +namespace Symfony\Component\Security\Http\RememberMe; + +use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\Request; + /** * Interface that needs to be implemented by classes which provide remember-me * capabilities. |