diff options
author | Christian Flothmann <christian.flothmann@xabbuh.de> | 2015-05-31 17:00:49 +0200 |
---|---|---|
committer | Christian Flothmann <christian.flothmann@xabbuh.de> | 2015-05-31 17:00:49 +0200 |
commit | 1bd6c22e4ef584f059b5f0aa3591e651ad70f806 (patch) | |
tree | 1f7b6e868ed6fbfe8b8941ca76e33f4bd1d7ee6c | |
parent | b3d032613d74a7d5d7babeee28d9ac8f870ff36c (diff) | |
download | symfony-security-1bd6c22e4ef584f059b5f0aa3591e651ad70f806.zip symfony-security-1bd6c22e4ef584f059b5f0aa3591e651ad70f806.tar.gz symfony-security-1bd6c22e4ef584f059b5f0aa3591e651ad70f806.tar.bz2 |
[Security][Acl] enforce string identifiers
-rw-r--r-- | Acl/Domain/ObjectIdentity.php | 4 | ||||
-rw-r--r-- | Tests/Acl/Domain/ObjectIdentityTest.php | 24 |
2 files changed, 25 insertions, 3 deletions
diff --git a/Acl/Domain/ObjectIdentity.php b/Acl/Domain/ObjectIdentity.php index 907b1d8..fc5b9c6 100644 --- a/Acl/Domain/ObjectIdentity.php +++ b/Acl/Domain/ObjectIdentity.php @@ -36,7 +36,7 @@ final class ObjectIdentity implements ObjectIdentityInterface */ public function __construct($identifier, $type) { - if (empty($identifier)) { + if ('' === $identifier) { throw new \InvalidArgumentException('$identifier cannot be empty.'); } if (empty($type)) { @@ -66,7 +66,7 @@ final class ObjectIdentity implements ObjectIdentityInterface if ($domainObject instanceof DomainObjectInterface) { return new self($domainObject->getObjectIdentifier(), ClassUtils::getRealClass($domainObject)); } elseif (method_exists($domainObject, 'getId')) { - return new self($domainObject->getId(), ClassUtils::getRealClass($domainObject)); + return new self((string) $domainObject->getId(), ClassUtils::getRealClass($domainObject)); } } catch (\InvalidArgumentException $invalid) { throw new InvalidDomainObjectException($invalid->getMessage(), 0, $invalid); diff --git a/Tests/Acl/Domain/ObjectIdentityTest.php b/Tests/Acl/Domain/ObjectIdentityTest.php index 9281fd5..111ae8a 100644 --- a/Tests/Acl/Domain/ObjectIdentityTest.php +++ b/Tests/Acl/Domain/ObjectIdentityTest.php @@ -64,6 +64,26 @@ namespace Symfony\Component\Security\Tests\Acl\Domain $this->assertEquals('Symfony\Component\Security\Tests\Acl\Domain\TestDomainObject', $id->getType()); } + public function testFromDomainObjectWithoutInterfaceEnforcesStringIdentifier() + { + $domainObject = new TestDomainObject(); + $domainObject->id = 1; + $id = ObjectIdentity::fromDomainObject($domainObject); + + $this->assertSame('1', $id->getIdentifier()); + $this->assertEquals('Symfony\Component\Security\Tests\Acl\Domain\TestDomainObject', $id->getType()); + } + + public function testFromDomainObjectWithoutInterfaceAllowsZeroAsIdentifier() + { + $domainObject = new TestDomainObject(); + $domainObject->id = '0'; + $id = ObjectIdentity::fromDomainObject($domainObject); + + $this->assertSame('0', $id->getIdentifier()); + $this->assertEquals('Symfony\Component\Security\Tests\Acl\Domain\TestDomainObject', $id->getType()); + } + /** * @dataProvider getCompareData */ @@ -89,6 +109,8 @@ namespace Symfony\Component\Security\Tests\Acl\Domain class TestDomainObject { + public $id = 'getId()'; + public function getObjectIdentifier() { return 'getObjectIdentifier()'; @@ -96,7 +118,7 @@ namespace Symfony\Component\Security\Tests\Acl\Domain public function getId() { - return 'getId()'; + return $this->id; } } } |