3 namespace Tests\Permissions\Scenarios;
5 class EntityRolePermissionsTest extends PermissionScenarioTestCase
7 public function test_01_explicit_allow()
9 [$user, $role] = $this->users->newUserWithRole();
10 $page = $this->entities->page();
11 $this->permissions->setEntityPermissions($page, ['view'], [$role], false);
13 $this->assertVisibleToUser($page, $user);
16 public function test_02_explicit_deny()
18 [$user, $role] = $this->users->newUserWithRole();
19 $page = $this->entities->page();
20 $this->permissions->setEntityPermissions($page, [], [$role], false);
22 $this->assertNotVisibleToUser($page, $user);
25 public function test_03_same_level_conflicting()
27 [$user, $roleA] = $this->users->newUserWithRole();
28 $roleB = $this->users->attachNewRole($user);
29 $page = $this->entities->page();
31 $this->permissions->disableEntityInheritedPermissions($page);
32 $this->permissions->addEntityPermission($page, [], $roleA);
33 $this->permissions->addEntityPermission($page, ['view'], $roleB);
35 $this->assertVisibleToUser($page, $user);
38 public function test_20_inherit_allow()
40 [$user, $roleA] = $this->users->newUserWithRole();
41 $page = $this->entities->pageWithinChapter();
42 $chapter = $page->chapter;
44 $this->permissions->disableEntityInheritedPermissions($chapter);
45 $this->permissions->addEntityPermission($chapter, ['view'], $roleA);
47 $this->assertVisibleToUser($page, $user);
50 public function test_21_inherit_deny()
52 [$user, $roleA] = $this->users->newUserWithRole();
53 $page = $this->entities->pageWithinChapter();
54 $chapter = $page->chapter;
56 $this->permissions->disableEntityInheritedPermissions($chapter);
57 $this->permissions->addEntityPermission($chapter, [], $roleA);
59 $this->assertNotVisibleToUser($page, $user);
62 public function test_22_same_level_conflict_inherit()
64 [$user, $roleA] = $this->users->newUserWithRole();
65 $roleB = $this->users->attachNewRole($user);
66 $page = $this->entities->pageWithinChapter();
67 $chapter = $page->chapter;
69 $this->permissions->disableEntityInheritedPermissions($chapter);
70 $this->permissions->addEntityPermission($chapter, [], $roleA);
71 $this->permissions->addEntityPermission($chapter, ['view'], $roleB);
73 $this->assertVisibleToUser($page, $user);
76 public function test_30_child_inherit_override_allow()
78 [$user, $roleA] = $this->users->newUserWithRole();
79 $page = $this->entities->pageWithinChapter();
80 $chapter = $page->chapter;
82 $this->permissions->disableEntityInheritedPermissions($chapter);
83 $this->permissions->addEntityPermission($chapter, [], $roleA);
84 $this->permissions->addEntityPermission($page, ['view'], $roleA);
86 $this->assertVisibleToUser($page, $user);
89 public function test_31_child_inherit_override_deny()
91 [$user, $roleA] = $this->users->newUserWithRole();
92 $page = $this->entities->pageWithinChapter();
93 $chapter = $page->chapter;
95 $this->permissions->disableEntityInheritedPermissions($chapter);
96 $this->permissions->addEntityPermission($chapter, ['view'], $roleA);
97 $this->permissions->addEntityPermission($page, [], $roleA);
99 $this->assertNotVisibleToUser($page, $user);
102 public function test_40_multi_role_inherit_conflict_override_deny()
104 [$user, $roleA] = $this->users->newUserWithRole();
105 $roleB = $this->users->attachNewRole($user);
106 $page = $this->entities->pageWithinChapter();
107 $chapter = $page->chapter;
109 $this->permissions->disableEntityInheritedPermissions($chapter);
110 $this->permissions->addEntityPermission($page, [], $roleA);
111 $this->permissions->addEntityPermission($chapter, ['view'], $roleB);
113 $this->assertVisibleToUser($page, $user);
116 public function test_41_multi_role_inherit_conflict_retain_allow()
118 [$user, $roleA] = $this->users->newUserWithRole();
119 $roleB = $this->users->attachNewRole($user);
120 $page = $this->entities->pageWithinChapter();
121 $chapter = $page->chapter;
123 $this->permissions->disableEntityInheritedPermissions($chapter);
124 $this->permissions->addEntityPermission($page, ['view'], $roleA);
125 $this->permissions->addEntityPermission($chapter, [], $roleB);
127 $this->assertVisibleToUser($page, $user);
130 public function test_50_role_override_allow()
132 [$user, $roleA] = $this->users->newUserWithRole();
133 $page = $this->entities->page();
134 $this->permissions->addEntityPermission($page, ['view'], $roleA);
136 $this->assertVisibleToUser($page, $user);
139 public function test_51_role_override_deny()
141 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-all']);
142 $page = $this->entities->page();
143 $this->permissions->addEntityPermission($page, [], $roleA);
145 $this->assertNotVisibleToUser($page, $user);
148 public function test_60_inherited_role_override_allow()
150 [$user, $roleA] = $this->users->newUserWithRole([], []);
151 $page = $this->entities->pageWithinChapter();
152 $chapter = $page->chapter;
153 $this->permissions->addEntityPermission($chapter, ['view'], $roleA);
155 $this->assertVisibleToUser($page, $user);
158 public function test_61_inherited_role_override_deny()
160 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-all']);
161 $page = $this->entities->pageWithinChapter();
162 $chapter = $page->chapter;
163 $this->permissions->addEntityPermission($chapter, [], $roleA);
165 $this->assertNotVisibleToUser($page, $user);
168 public function test_62_inherited_role_override_deny_on_own()
170 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-own']);
171 $page = $this->entities->pageWithinChapter();
172 $chapter = $page->chapter;
173 $this->permissions->addEntityPermission($chapter, [], $roleA);
174 $this->permissions->changeEntityOwner($page, $user);
176 $this->assertNotVisibleToUser($page, $user);
179 public function test_70_multi_role_inheriting_deny()
181 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-all']);
182 $roleB = $this->users->attachNewRole($user);
183 $page = $this->entities->page();
185 $this->permissions->addEntityPermission($page, [], $roleB);
187 $this->assertNotVisibleToUser($page, $user);
190 public function test_80_multi_role_inherited_deny_via_parent()
192 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-all']);
193 $roleB = $this->users->attachNewRole($user);
194 $page = $this->entities->pageWithinChapter();
195 $chapter = $page->chapter;
197 $this->permissions->addEntityPermission($chapter, [], $roleB);
199 $this->assertNotVisibleToUser($page, $user);