]> BookStack Code Mirror - bookstack/commitdiff
Fixed role entity permissions ignoring inheritance 3986/head
authorDan Brown <redacted>
Tue, 24 Jan 2023 21:26:41 +0000 (21:26 +0000)
committerDan Brown <redacted>
Tue, 24 Jan 2023 21:26:41 +0000 (21:26 +0000)
Added additional scnenario tests to cover

app/Auth/Permissions/EntityPermissionEvaluator.php
dev/docs/permission-scenario-testing.md
tests/Permissions/Scenarios/EntityRolePermissionsTest.php

index f5e75be3ea754ac679d813ae471d519b431a05cc..51db45bbc06399ddbf4f65a17c1562cff7fa0ab8 100644 (file)
@@ -66,6 +66,10 @@ class EntityPermissionEvaluator
                     $permitsByType[$type][$roleId] = $permission->{$this->action};
                 }
             }
+
+            if (isset($permitsByType['fallback'][0])) {
+                break;
+            }
         }
 
         return $permitsByType;
index 54b1bcfe107311aa3bd263e64475a5bfe017c546..7a9cc1126685369f3f75c0aa924b68dd86ca4c7f 100644 (file)
@@ -317,4 +317,27 @@ User granted page permission.
 - Role B has no entity chapter permissions.
 - User has Role A & B.
 
+User denied page permission.
+
+#### test_90_fallback_overrides_parent_entity_role_deny
+
+- Chapter permissions have inherit disabled.
+- Page permissions have inherit disabled.
+- Chapter fallback has entity deny permission.
+- Page fallback has entity deny permission.
+- Role A has entity allow chapter permission.
+- User has Role A.
+
+User denied page permission.
+
+#### test_91_fallback_overrides_parent_entity_role_inherit
+
+- Book permissions have inherit disabled.
+- Chapter permissions have inherit disabled. 
+- Page permissions have inherit enabled.
+- Book fallback has entity deny permission.
+- Chapter fallback has entity deny permission.
+- Role A has entity allow book permission.
+- User has Role A.
+
 User denied page permission.
\ No newline at end of file
index c8f1401e7745ea2a49c8619b2a83fbb9dfcd2422..bd5b31fdc35113bf1f8bc0feaf7c54e3c6971c84 100644 (file)
@@ -293,4 +293,31 @@ class EntityRolePermissionsTest extends PermissionScenarioTestCase
 
         $this->assertNotVisibleToUser($page, $user);
     }
+
+    public function test_90_fallback_overrides_parent_entity_role_deny()
+    {
+        [$user, $roleA] = $this->users->newUserWithRole();
+        $page = $this->entities->page();
+        $chapter = $page->chapter;
+
+        $this->permissions->setFallbackPermissions($chapter, []);
+        $this->permissions->setFallbackPermissions($page, []);
+        $this->permissions->addEntityPermission($chapter, ['view'], $roleA);
+
+        $this->assertNotVisibleToUser($page, $user);
+    }
+
+    public function test_91_fallback_overrides_parent_entity_role_inherit()
+    {
+        [$user, $roleA] = $this->users->newUserWithRole();
+        $page = $this->entities->page();
+        $chapter = $page->chapter;
+        $book = $page->book;
+
+        $this->permissions->setFallbackPermissions($book, []);
+        $this->permissions->setFallbackPermissions($chapter, []);
+        $this->permissions->addEntityPermission($book, ['view'], $roleA);
+
+        $this->assertNotVisibleToUser($page, $user);
+    }
 }