From edb6b0af343b78585d4e4d734b91acf4c9e45d1a Mon Sep 17 00:00:00 2001 From: Evgeniy Sokolov Date: Sat, 5 Dec 2015 00:14:04 +0100 Subject: [PATCH 1/4] fix FieldEntry serialization --- Domain/Entry.php | 42 ++++++++++++++++++++------------- Domain/FieldEntry.php | 35 ++++++++++----------------- Tests/Domain/FieldEntryTest.php | 15 ++++++++++++ 3 files changed, 54 insertions(+), 38 deletions(-) diff --git a/Domain/Entry.php b/Domain/Entry.php index 55c4b37..66ef8ca 100644 --- a/Domain/Entry.php +++ b/Domain/Entry.php @@ -178,15 +178,7 @@ public function setStrategy($strategy) */ public function serialize() { - return serialize(array( - $this->mask, - $this->id, - $this->securityIdentity, - $this->strategy, - $this->auditFailure, - $this->auditSuccess, - $this->granting, - )); + return serialize($this->getSerializeData()); } /** @@ -195,14 +187,32 @@ public function serialize() * @param string $serialized */ public function unserialize($serialized) + { + $this->setSerializeData(unserialize($serialized)); + } + + protected function getSerializeData() + { + return array( + $this->mask, + $this->id, + $this->securityIdentity, + $this->strategy, + $this->auditFailure, + $this->auditSuccess, + $this->granting + ); + } + + 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; } } diff --git a/Domain/FieldEntry.php b/Domain/FieldEntry.php index 86b1e5b..1884c07 100644 --- a/Domain/FieldEntry.php +++ b/Domain/FieldEntry.php @@ -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) { @@ -52,23 +52,14 @@ public function getField() return $this->field; } - /** - * {@inheritdoc} - */ - public function serialize() + protected function getSerializeData() { - return serialize(array( - $this->field, - parent::serialize(), - )); + return array($this->field, parent::getSerializeData()); } - /** - * {@inheritdoc} - */ - public function unserialize($serialized) + protected function setSerializeData(array $array) { - list($this->field, $parentStr) = unserialize($serialized); - parent::unserialize($parentStr); + $this->field = $array[0]; + parent::setSerializeData($array[1]); } } diff --git a/Tests/Domain/FieldEntryTest.php b/Tests/Domain/FieldEntryTest.php index 735e2e8..b0161e7 100644 --- a/Tests/Domain/FieldEntryTest.php +++ b/Tests/Domain/FieldEntryTest.php @@ -22,6 +22,21 @@ 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 testSerializeUnserialize() { $ace = $this->getAce(); From 8db437f728c4110fc742e893e0c252c02e4aa72d Mon Sep 17 00:00:00 2001 From: Evgeniy Sokolov Date: Sat, 5 Dec 2015 22:44:03 +0100 Subject: [PATCH 2/4] phpdocs --- Domain/Entry.php | 8 ++++++++ Domain/FieldEntry.php | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/Domain/Entry.php b/Domain/Entry.php index 66ef8ca..9d12fac 100644 --- a/Domain/Entry.php +++ b/Domain/Entry.php @@ -191,6 +191,10 @@ public function unserialize($serialized) $this->setSerializeData(unserialize($serialized)); } + /** + * Get data for serialize + * @return array + */ protected function getSerializeData() { return array( @@ -204,6 +208,10 @@ protected function getSerializeData() ); } + /** + * Set unserialized data + * @param array $array Array of serialized data + */ protected function setSerializeData(array $array) { list($this->mask, diff --git a/Domain/FieldEntry.php b/Domain/FieldEntry.php index 1884c07..3fd82a7 100644 --- a/Domain/FieldEntry.php +++ b/Domain/FieldEntry.php @@ -52,11 +52,17 @@ public function getField() return $this->field; } + /** + * {@inheritdoc} + */ protected function getSerializeData() { return array($this->field, parent::getSerializeData()); } + /** + * {@inheritdoc} + */ protected function setSerializeData(array $array) { $this->field = $array[0]; From 28b91cea4c456ea5e9fdf05f82f2052e2d65c832 Mon Sep 17 00:00:00 2001 From: Evgeniy Sokolov Date: Sat, 5 Dec 2015 22:52:30 +0100 Subject: [PATCH 3/4] unserialize legacy support --- Domain/FieldEntry.php | 17 +++++++++++++++++ Tests/Domain/FieldEntryTest.php | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/Domain/FieldEntry.php b/Domain/FieldEntry.php index 3fd82a7..8e4a0fd 100644 --- a/Domain/FieldEntry.php +++ b/Domain/FieldEntry.php @@ -52,6 +52,23 @@ public function getField() return $this->field; } + /** + * {@inheritdoc} + * + */ + public function unserialize($serialized) + { + # Legacy support + $unserialized = unserialize($serialized); + + if (is_string($unserialized[1])) { + $unserialized[1] = unserialize($unserialized[1]); + $this->setSerializeData($unserialized); + } + + $this->setSerializeData($unserialized); + } + /** * {@inheritdoc} */ diff --git a/Tests/Domain/FieldEntryTest.php b/Tests/Domain/FieldEntryTest.php index b0161e7..b3e4053 100644 --- a/Tests/Domain/FieldEntryTest.php +++ b/Tests/Domain/FieldEntryTest.php @@ -37,6 +37,15 @@ public function testSerializeUnserializeSameSecurityIdentity() $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(); From 338d08d194dac05b7f4da38de72ba3baadae02fa Mon Sep 17 00:00:00 2001 From: Evgeniy Sokolov Date: Sat, 5 Dec 2015 23:00:18 +0100 Subject: [PATCH 4/4] cs --- Domain/FieldEntry.php | 1 - 1 file changed, 1 deletion(-) diff --git a/Domain/FieldEntry.php b/Domain/FieldEntry.php index 8e4a0fd..ca9e73d 100644 --- a/Domain/FieldEntry.php +++ b/Domain/FieldEntry.php @@ -54,7 +54,6 @@ public function getField() /** * {@inheritdoc} - * */ public function unserialize($serialized) {