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_71_multi_role_inheriting_deny_on_own()
192 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-own']);
193 $roleB = $this->users->attachNewRole($user);
194 $page = $this->entities->page();
195 $this->permissions->changeEntityOwner($page, $user);
197 $this->permissions->addEntityPermission($page, [], $roleB);
199 $this->assertNotVisibleToUser($page, $user);
203 public function test_75_multi_role_inherited_deny_via_parent()
205 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-all']);
206 $roleB = $this->users->attachNewRole($user);
207 $page = $this->entities->pageWithinChapter();
208 $chapter = $page->chapter;
210 $this->permissions->addEntityPermission($chapter, [], $roleB);
212 $this->assertNotVisibleToUser($page, $user);
215 public function test_76_multi_role_inherited_deny_via_parent_on_own()
217 [$user, $roleA] = $this->users->newUserWithRole([], ['page-view-own']);
218 $roleB = $this->users->attachNewRole($user);
219 $page = $this->entities->pageWithinChapter();
220 $chapter = $page->chapter;
221 $this->permissions->changeEntityOwner($page, $user);
223 $this->permissions->addEntityPermission($chapter, [], $roleB);
225 $this->assertNotVisibleToUser($page, $user);
228 public function test_80_fallback_override_allow()
230 [$user, $roleA] = $this->users->newUserWithRole();
231 $page = $this->entities->page();
233 $this->permissions->setFallbackPermissions($page, []);
234 $this->permissions->addEntityPermission($page, ['view'], $roleA);
236 $this->assertVisibleToUser($page, $user);
238 public function test_81_fallback_override_deny()
240 [$user, $roleA] = $this->users->newUserWithRole();
241 $page = $this->entities->page();
243 $this->permissions->setFallbackPermissions($page, ['view']);
244 $this->permissions->addEntityPermission($page, [], $roleA);
246 $this->assertNotVisibleToUser($page, $user);
249 public function test_84_fallback_override_allow_multi_role()
251 [$user, $roleA] = $this->users->newUserWithRole();
252 $roleB = $this->users->attachNewRole($user);
253 $page = $this->entities->page();
255 $this->permissions->setFallbackPermissions($page, []);
256 $this->permissions->addEntityPermission($page, ['view'], $roleA);
258 $this->assertVisibleToUser($page, $user);
261 public function test_85_fallback_override_deny_multi_role()
263 [$user, $roleA] = $this->users->newUserWithRole();
264 $roleB = $this->users->attachNewRole($user);
265 $page = $this->entities->page();
267 $this->permissions->setFallbackPermissions($page, ['view']);
268 $this->permissions->addEntityPermission($page, [], $roleA);
270 $this->assertNotVisibleToUser($page, $user);
273 public function test_86_fallback_override_allow_inherit()
275 [$user, $roleA] = $this->users->newUserWithRole();
276 $page = $this->entities->page();
277 $chapter = $page->chapter;
279 $this->permissions->setFallbackPermissions($chapter, []);
280 $this->permissions->addEntityPermission($chapter, ['view'], $roleA);
282 $this->assertVisibleToUser($page, $user);
285 public function test_87_fallback_override_deny_inherit()
287 [$user, $roleA] = $this->users->newUserWithRole();
288 $page = $this->entities->page();
289 $chapter = $page->chapter;
291 $this->permissions->setFallbackPermissions($chapter, ['view']);
292 $this->permissions->addEntityPermission($chapter, [], $roleA);
294 $this->assertNotVisibleToUser($page, $user);
297 public function test_88_fallback_override_allow_multi_role_inherit()
299 [$user, $roleA] = $this->users->newUserWithRole();
300 $roleB = $this->users->attachNewRole($user);
301 $page = $this->entities->page();
302 $chapter = $page->chapter;
304 $this->permissions->setFallbackPermissions($chapter, []);
305 $this->permissions->addEntityPermission($chapter, ['view'], $roleA);
307 $this->assertVisibleToUser($page, $user);
310 public function test_89_fallback_override_deny_multi_role_inherit()
312 [$user, $roleA] = $this->users->newUserWithRole();
313 $roleB = $this->users->attachNewRole($user);
314 $page = $this->entities->page();
315 $chapter = $page->chapter;
317 $this->permissions->setFallbackPermissions($chapter, ['view']);
318 $this->permissions->addEntityPermission($chapter, [], $roleA);
320 $this->assertNotVisibleToUser($page, $user);
323 public function test_90_fallback_overrides_parent_entity_role_deny()
325 [$user, $roleA] = $this->users->newUserWithRole();
326 $page = $this->entities->page();
327 $chapter = $page->chapter;
329 $this->permissions->setFallbackPermissions($chapter, []);
330 $this->permissions->setFallbackPermissions($page, []);
331 $this->permissions->addEntityPermission($chapter, ['view'], $roleA);
333 $this->assertNotVisibleToUser($page, $user);
336 public function test_91_fallback_overrides_parent_entity_role_inherit()
338 [$user, $roleA] = $this->users->newUserWithRole();
339 $page = $this->entities->page();
340 $chapter = $page->chapter;
343 $this->permissions->setFallbackPermissions($book, []);
344 $this->permissions->setFallbackPermissions($chapter, []);
345 $this->permissions->addEntityPermission($book, ['view'], $roleA);
347 $this->assertNotVisibleToUser($page, $user);