merged branch gordalina/multiple-classes-oids-acls (PR #7567)
This PR was submitted for the master branch but it was merged into the 2.2 branch instead (closes #7567).
Discussion
----------
[Security] [ACL] Fix finding ACLs from ObjectIdentity's with different types
| Q | A
| ------------- | ---
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
If more than one ObjectIdentity with different Type (Class name) is given to AclProvider::findAcls() it would throw an exception stating that it could not find the ACLs
This fixes this issue which was introduced in 2.2.0-RC3 - see commit 3c3a90b9e5
/cc @iBiryukov @schmittjoh
Commits
-------
8b0bb57 [Security] [ACL] Fix finding ACLs from ObjectIdentity's with different types
This commit is contained in:
commit
7379b9e4d1
@ -263,7 +263,11 @@ SELECTCLAUSE;
|
||||
for ($i = 0; $i < $count; $i++) {
|
||||
if (!isset($types[$batch[$i]->getType()])) {
|
||||
$types[$batch[$i]->getType()] = true;
|
||||
if ($count > 1) {
|
||||
|
||||
// if there is more than one type we can safely break out of the
|
||||
// loop, because it is the differentiator factor on whether to
|
||||
// query for only one or more class types
|
||||
if (count($types) > 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -72,6 +72,23 @@ class AclProviderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertTrue($oids[1]->equals($acl1->getObjectIdentity()));
|
||||
}
|
||||
|
||||
public function testFindAclsWithDifferentTypes()
|
||||
{
|
||||
$oids = array();
|
||||
$oids[] = new ObjectIdentity('123', 'Bundle\SomeVendor\MyBundle\Entity\SomeEntity');
|
||||
$oids[] = new ObjectIdentity('123', 'Bundle\MyBundle\Entity\AnotherEntity');
|
||||
|
||||
$provider = $this->getProvider();
|
||||
|
||||
$acls = $provider->findAcls($oids);
|
||||
$this->assertInstanceOf('SplObjectStorage', $acls);
|
||||
$this->assertCount(2, $acls);
|
||||
$this->assertInstanceOf('Symfony\Component\Security\Acl\Domain\Acl', $acl0 = $acls->offsetGet($oids[0]));
|
||||
$this->assertInstanceOf('Symfony\Component\Security\Acl\Domain\Acl', $acl1 = $acls->offsetGet($oids[1]));
|
||||
$this->assertTrue($oids[0]->equals($acl0->getObjectIdentity()));
|
||||
$this->assertTrue($oids[1]->equals($acl1->getObjectIdentity()));
|
||||
}
|
||||
|
||||
public function testFindAclCachesAclInMemory()
|
||||
{
|
||||
$oid = new ObjectIdentity('1', 'foo');
|
||||
|
Reference in New Issue
Block a user