-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
TeamHasPermissionsTest.php
129 lines (102 loc) · 4.49 KB
/
TeamHasPermissionsTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
namespace Spatie\Permission\Tests;
use Spatie\Permission\Tests\TestModels\User;
class TeamHasPermissionsTest extends HasPermissionsTest
{
/** @var bool */
protected $hasTeams = true;
/** @test */
public function it_can_assign_same_and_different_permission_on_same_user_on_different_teams()
{
setPermissionsTeamId(1);
$this->testUser->givePermissionTo('edit-articles', 'edit-news');
setPermissionsTeamId(2);
$this->testUser->givePermissionTo('edit-articles', 'edit-blog');
setPermissionsTeamId(1);
$this->testUser->load('permissions');
$this->assertEquals(
collect(['edit-articles', 'edit-news']),
$this->testUser->getPermissionNames()->sort()->values()
);
$this->assertTrue($this->testUser->hasAllDirectPermissions(['edit-articles', 'edit-news']));
$this->assertFalse($this->testUser->hasAllDirectPermissions(['edit-articles', 'edit-blog']));
setPermissionsTeamId(2);
$this->testUser->load('permissions');
$this->assertEquals(
collect(['edit-articles', 'edit-blog']),
$this->testUser->getPermissionNames()->sort()->values()
);
$this->assertTrue($this->testUser->hasAllDirectPermissions(['edit-articles', 'edit-blog']));
$this->assertFalse($this->testUser->hasAllDirectPermissions(['edit-articles', 'edit-news']));
}
/** @test */
public function it_can_list_all_the_coupled_permissions_both_directly_and_via_roles_on_same_user_on_different_teams()
{
$this->testUserRole->givePermissionTo('edit-articles');
setPermissionsTeamId(1);
$this->testUser->assignRole('testRole');
$this->testUser->givePermissionTo('edit-news');
setPermissionsTeamId(2);
$this->testUser->assignRole('testRole');
$this->testUser->givePermissionTo('edit-blog');
setPermissionsTeamId(1);
$this->testUser->load('roles', 'permissions');
$this->assertEquals(
collect(['edit-articles', 'edit-news']),
$this->testUser->getAllPermissions()->pluck('name')->sort()->values()
);
setPermissionsTeamId(2);
$this->testUser->load('roles', 'permissions');
$this->assertEquals(
collect(['edit-articles', 'edit-blog']),
$this->testUser->getAllPermissions()->pluck('name')->sort()->values()
);
}
/** @test */
public function it_can_sync_or_remove_permission_without_detach_on_different_teams()
{
setPermissionsTeamId(1);
$this->testUser->syncPermissions('edit-articles', 'edit-news');
setPermissionsTeamId(2);
$this->testUser->syncPermissions('edit-articles', 'edit-blog');
setPermissionsTeamId(1);
$this->testUser->load('permissions');
$this->assertEquals(
collect(['edit-articles', 'edit-news']),
$this->testUser->getPermissionNames()->sort()->values()
);
$this->testUser->revokePermissionTo('edit-articles');
$this->assertEquals(
collect(['edit-news']),
$this->testUser->getPermissionNames()->sort()->values()
);
setPermissionsTeamId(2);
$this->testUser->load('permissions');
$this->assertEquals(
collect(['edit-articles', 'edit-blog']),
$this->testUser->getPermissionNames()->sort()->values()
);
}
/** @test */
public function it_can_scope_users_on_different_teams()
{
$user1 = User::create(['email' => 'user1@test.com']);
$user2 = User::create(['email' => 'user2@test.com']);
setPermissionsTeamId(2);
$user1->givePermissionTo(['edit-articles', 'edit-news']);
$this->testUserRole->givePermissionTo('edit-articles');
$user2->assignRole('testRole');
setPermissionsTeamId(1);
$user1->givePermissionTo(['edit-articles']);
setPermissionsTeamId(2);
$scopedUsers1Team2 = User::permission(['edit-articles', 'edit-news'])->get();
$scopedUsers2Team2 = User::permission('edit-news')->get();
$this->assertEquals(2, $scopedUsers1Team2->count());
$this->assertEquals(1, $scopedUsers2Team2->count());
setPermissionsTeamId(1);
$scopedUsers1Team1 = User::permission(['edit-articles', 'edit-news'])->get();
$scopedUsers2Team1 = User::permission('edit-news')->get();
$this->assertEquals(1, $scopedUsers1Team1->count());
$this->assertEquals(0, $scopedUsers2Team1->count());
}
}