summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Acl/Domain/Acl.php1
-rw-r--r--Acl/Exception/Exception.php2
-rw-r--r--Acl/Permission/AbstractMaskBuilder.php85
-rw-r--r--Acl/Permission/BasicPermissionMap.php10
-rw-r--r--Acl/Permission/MaskBuilder.php76
-rw-r--r--Acl/Permission/MaskBuilderInterface.php75
-rw-r--r--Acl/Permission/MaskBuilderRetrievalInterface.php25
-rw-r--r--Acl/Tests/Dbal/AclProviderBenchmarkTest.php6
-rw-r--r--Acl/Tests/Dbal/MutableAclProviderTest.php4
-rw-r--r--CHANGELOG.md3
-rw-r--r--Core/Authentication/Provider/DaoAuthenticationProvider.php2
-rw-r--r--Core/Tests/Authorization/AccessDecisionManagerTest.php4
-rw-r--r--Http/RememberMe/RememberMeServicesInterface.php11
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.