From ac50090f8edd02f72f953be8bfd5f8b809b2e17e Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Fri, 9 Jun 2023 00:12:30 +0530 Subject: [PATCH 1/5] Fix: return array instead of object --- src/Database/Document.php | 2 +- tests/Database/Validator/PermissionsTest.php | 40 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/Database/Document.php b/src/Database/Document.php index 2c3531e76..93416243f 100644 --- a/src/Database/Document.php +++ b/src/Database/Document.php @@ -79,7 +79,7 @@ public function getCollection(): string */ public function getPermissions(): array { - return \array_unique($this->getAttribute('$permissions', [])); + return \array_values(\array_unique($this->getAttribute('$permissions', []))); } /** diff --git a/tests/Database/Validator/PermissionsTest.php b/tests/Database/Validator/PermissionsTest.php index a42b10910..148f950e4 100644 --- a/tests/Database/Validator/PermissionsTest.php +++ b/tests/Database/Validator/PermissionsTest.php @@ -297,4 +297,44 @@ public function testInvalidPermissions(): void $this->assertFalse($object->isValid($permissions)); $this->assertEquals('You can only provide up to 100 permissions.', $object->getDescription()); } + + /* + * Test for checking duplicate methods input. The getPermissions should return an a list array + */ + public function testDuplicateMethods(): void + { + $object = new Permissions(); + + $user = ID::unique(); + + $document = new Document([ + '$id' => uniqid(), + '$collection' => uniqid(), + '$permissions' => [ + Permission::read(Role::any()), + Permission::read(Role::user($user)), + Permission::read(Role::user($user)), + Permission::write(Role::user($user)), + Permission::update(Role::user($user)), + Permission::delete(Role::user($user)), + ], + 'title' => 'This is a test.', + 'list' => [ + 'one' + ], + 'children' => [ + new Document(['name' => 'x']), + new Document(['name' => 'y']), + new Document(['name' => 'z']), + ] + ]); + $this->assertTrue($object->isValid($document->getPermissions())); + $permissions = $document->getPermissions(); + $this->assertEquals(5, count($permissions)); + $this->assertEquals('read("any")', $permissions[0]); + $this->assertEquals('read("user:' . $user . '")', $permissions[1]); + $this->assertEquals('write("user:' . $user . '")', $permissions[2]); + $this->assertEquals('update("user:' . $user . '")', $permissions[3]); + $this->assertEquals('delete("user:' . $user . '")', $permissions[4]); + } } From 86ffbed9f60a32d6fa0b23cafaeff77db18a6cb8 Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Fri, 9 Jun 2023 10:40:01 +0530 Subject: [PATCH 2/5] chore: modify aggregate Function to return duplicate values --- src/Database/Helpers/Permission.php | 2 +- tests/Database/PermissionTest.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Database/Helpers/Permission.php b/src/Database/Helpers/Permission.php index bb850cc6a..82113223b 100644 --- a/src/Database/Helpers/Permission.php +++ b/src/Database/Helpers/Permission.php @@ -170,7 +170,7 @@ public static function aggregate(?array $permissions, array $allowed = Database: } } } - return $mutated; + return \array_values(\array_unique($mutated)); } /** diff --git a/tests/Database/PermissionTest.php b/tests/Database/PermissionTest.php index 531002bed..3ed985509 100644 --- a/tests/Database/PermissionTest.php +++ b/tests/Database/PermissionTest.php @@ -284,5 +284,20 @@ public function testAggregation(): void $parsed = Permission::aggregate($permissions, [Database::PERMISSION_UPDATE, Database::PERMISSION_DELETE]); $this->assertEquals(['update("any")', 'delete("any")'], $parsed); + + $permissions = [ + 'read("any")', + 'read("user:123")', + 'read("user:123")', + 'write("user:123")', + 'update("user:123")', + 'delete("user:123")' + ]; + $parsed = Permission::aggregate($permissions, Database::PERMISSIONS); + $this->assertEquals(['read("any")', + 'read("user:123")', + 'create("user:123")', + 'update("user:123")', + 'delete("user:123")'], $parsed); } } From 49c48ec52e24a89f8d8e0699409f8d3184d4029e Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Fri, 9 Jun 2023 10:41:34 +0530 Subject: [PATCH 3/5] fix: lint --- tests/Database/PermissionTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Database/PermissionTest.php b/tests/Database/PermissionTest.php index 3ed985509..4a91ac099 100644 --- a/tests/Database/PermissionTest.php +++ b/tests/Database/PermissionTest.php @@ -293,6 +293,7 @@ public function testAggregation(): void 'update("user:123")', 'delete("user:123")' ]; + $parsed = Permission::aggregate($permissions, Database::PERMISSIONS); $this->assertEquals(['read("any")', 'read("user:123")', From c187926d70a358e7fa3d0daea6b4d2dcd77fb7ed Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi <62933155+2002Bishwajeet@users.noreply.github.com> Date: Fri, 9 Jun 2023 11:03:27 +0530 Subject: [PATCH 4/5] Update tests/Database/PermissionTest.php Co-authored-by: Jake Barnby --- tests/Database/PermissionTest.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/Database/PermissionTest.php b/tests/Database/PermissionTest.php index 4a91ac099..a69b2a604 100644 --- a/tests/Database/PermissionTest.php +++ b/tests/Database/PermissionTest.php @@ -295,10 +295,12 @@ public function testAggregation(): void ]; $parsed = Permission::aggregate($permissions, Database::PERMISSIONS); - $this->assertEquals(['read("any")', + $this->assertEquals([ + 'read("any")', 'read("user:123")', 'create("user:123")', 'update("user:123")', - 'delete("user:123")'], $parsed); + 'delete("user:123")', + ], $parsed); } } From 770ef5bcfccb0f7045b26be23e2d5c0861e8a87a Mon Sep 17 00:00:00 2001 From: Bishwajeet Parhi Date: Fri, 9 Jun 2023 11:06:29 +0530 Subject: [PATCH 5/5] chore: fix style fixes --- tests/Database/Validator/PermissionsTest.php | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tests/Database/Validator/PermissionsTest.php b/tests/Database/Validator/PermissionsTest.php index 148f950e4..c981b92fe 100644 --- a/tests/Database/Validator/PermissionsTest.php +++ b/tests/Database/Validator/PermissionsTest.php @@ -303,7 +303,7 @@ public function testInvalidPermissions(): void */ public function testDuplicateMethods(): void { - $object = new Permissions(); + $validator = new Permissions(); $user = ID::unique(); @@ -328,13 +328,15 @@ public function testDuplicateMethods(): void new Document(['name' => 'z']), ] ]); - $this->assertTrue($object->isValid($document->getPermissions())); + $this->assertTrue($validator->isValid($document->getPermissions())); $permissions = $document->getPermissions(); $this->assertEquals(5, count($permissions)); - $this->assertEquals('read("any")', $permissions[0]); - $this->assertEquals('read("user:' . $user . '")', $permissions[1]); - $this->assertEquals('write("user:' . $user . '")', $permissions[2]); - $this->assertEquals('update("user:' . $user . '")', $permissions[3]); - $this->assertEquals('delete("user:' . $user . '")', $permissions[4]); + $this->assertEquals([ + 'read("any")', + 'read("user:' . $user . '")', + 'write("user:' . $user . '")', + 'update("user:' . $user . '")', + 'delete("user:' . $user . '")', + ], $permissions); } }