Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 32 additions & 14 deletions Domain/Entry.php
Original file line number Diff line number Diff line change
Expand Up @@ -178,31 +178,49 @@ public function setStrategy($strategy)
*/
public function serialize()
{
return serialize(array(
return serialize($this->getSerializeData());
}

/**
* Implementation of \Serializable.
*
* @param string $serialized
*/
public function unserialize($serialized)
{
$this->setSerializeData(unserialize($serialized));
}

/**
* Get data for serialize
* @return array
*/
protected function getSerializeData()
{
return array(
$this->mask,
$this->id,
$this->securityIdentity,
$this->strategy,
$this->auditFailure,
$this->auditSuccess,
$this->granting,
));
$this->granting
);
}

/**
* Implementation of \Serializable.
*
* @param string $serialized
* Set unserialized data
* @param array $array Array of serialized data
*/
public function unserialize($serialized)
protected function setSerializeData(array $array)
{
list($this->mask,
$this->id,
$this->securityIdentity,
$this->strategy,
$this->auditFailure,
$this->auditSuccess,
$this->granting
) = unserialize($serialized);
$this->id,
$this->securityIdentity,
$this->strategy,
$this->auditFailure,
$this->auditSuccess,
$this->granting
) = $array;
}
}
45 changes: 29 additions & 16 deletions Domain/FieldEntry.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@ class FieldEntry extends Entry implements FieldEntryInterface
/**
* Constructor.
*
* @param int $id
* @param AclInterface $acl
* @param string $field
* @param int $id
* @param AclInterface $acl
* @param string $field
* @param SecurityIdentityInterface $sid
* @param string $strategy
* @param int $mask
* @param bool $granting
* @param bool $auditFailure
* @param bool $auditSuccess
* @param string $strategy
* @param int $mask
* @param bool $granting
* @param bool $auditFailure
* @param bool $auditSuccess
*/
public function __construct($id, AclInterface $acl, $field, SecurityIdentityInterface $sid, $strategy, $mask, $granting, $auditFailure, $auditSuccess)
{
Expand All @@ -55,20 +55,33 @@ public function getField()
/**
* {@inheritdoc}
*/
public function serialize()
public function unserialize($serialized)
{
return serialize(array(
$this->field,
parent::serialize(),
));
# Legacy support
$unserialized = unserialize($serialized);

if (is_string($unserialized[1])) {
$unserialized[1] = unserialize($unserialized[1]);
$this->setSerializeData($unserialized);
}

$this->setSerializeData($unserialized);
}

/**
* {@inheritdoc}
*/
public function unserialize($serialized)
protected function getSerializeData()
{
return array($this->field, parent::getSerializeData());
}

/**
* {@inheritdoc}
*/
protected function setSerializeData(array $array)
{
list($this->field, $parentStr) = unserialize($serialized);
parent::unserialize($parentStr);
$this->field = $array[0];
parent::setSerializeData($array[1]);
}
}
24 changes: 24 additions & 0 deletions Tests/Domain/FieldEntryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,30 @@ public function testConstructor()
$this->assertEquals('foo', $ace->getField());
}

public function testSerializeUnserializeSameSecurityIdentity()
{
$sid = $this->getSid();

$aceFirst = $this->getAce(null, $sid);
$aceSecond = $this->getAce(null, $sid);

/** @var FieldEntry $uAceFirst */
/** @var FieldEntry $uAceSecond */
list($uAceFirst, $uAceSecond) = unserialize(serialize(array($aceFirst, $aceSecond)));

$this->assertInstanceOf('Symfony\Component\Security\Acl\Model\SecurityIdentityInterface', $uAceFirst->getSecurityIdentity());
$this->assertSame($uAceFirst->getSecurityIdentity(), $uAceSecond->getSecurityIdentity());
}

public function testUnserializeLegacy()
{
$serialized = 'C:48:"Symfony\Component\Security\Acl\Domain\FieldEntry":300:{a:2:{i:0;s:5:"field";i:1;s:265:"a:7:{i:0;s:4:"mask";i:1;i:1;i:2;O:20:"SecurityEdentityMock":2:{s:48:" SecurityEdentityMock __phpunit_invocationMocker";N;s:46:" SecurityEdentityMock __phpunit_originalObject";N;}i:3;s:8:"strategy";i:4;s:12:"auditFailure";i:5;s:12:"auditSuccess";i:6;s:8:"granting";}";}}';
$ace = unserialize($serialized);
$this->assertNull($ace->getAcl());
$this->assertEquals(1, $ace->getId());
$this->assertEquals('field', $ace->getField());
}

public function testSerializeUnserialize()
{
$ace = $this->getAce();
Expand Down