3 namespace Tests\Permissions\Scenarios;
5 use BookStack\Entities\Models\Page;
8 // Cases defined in dev/docs/permission-scenario-testing.md
10 class EntityRolePermissions extends TestCase
12 public function test_01_explicit_allow()
14 $user = $this->getViewer();
15 $role = $user->roles->first();
16 $page = $this->entities->page();
17 $this->entities->setPermissions($page, ['view'], [$role], false);
19 $this->actingAs($user);
20 $this->assertTrue(userCan('page-view', $page));
21 $this->assertNotNull(Page::visible()->findOrFail($page->id));
24 public function test_02_explicit_deny()
26 $user = $this->getViewer();
27 $role = $user->roles->first();
28 $page = $this->entities->page();
29 $this->entities->setPermissions($page, ['edit'], [$role], false);
31 $this->actingAs($user);
32 $this->assertFalse(userCan('page-view', $page));
33 $this->assertNull(Page::visible()->find($page->id));
36 public function test_03_same_level_conflicting()
38 $user = $this->getViewer();
39 $roleA = $user->roles->first();
40 $roleB = $this->createNewRole();
41 $user->attachRole($roleB);
43 $page = $this->entities->page();
44 // TODO - Can't do this as second call will overwrite first
45 $this->entities->setPermissions($page, ['edit'], [$roleA], false);
46 $this->entities->setPermissions($page, ['view'], [$roleB], false);
48 $this->actingAs($user);
49 $this->assertFalse(userCan('page-view', $page));
50 $this->assertNull(Page::visible()->find($page->id));