Skip to content

Commit b3f23d4

Browse files
committed
Support strings as numeric ids removeRole, revokePermissionTo, tests
1 parent 11b97be commit b3f23d4

File tree

6 files changed

+123
-3
lines changed

6 files changed

+123
-3
lines changed

src/Traits/HasPermissions.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,10 @@ public function syncPermissions(...$permissions)
452452
*/
453453
public function revokePermissionTo($permission)
454454
{
455-
$this->permissions()->detach($this->getStoredPermission($permission));
455+
$this->permissions()->detach(array_map(
456+
fn ($item) => $this->getStoredPermission($item)->getKey(),
457+
is_a($permission, Collection::class) ? $permission->all() : Arr::wrap($permission)
458+
));
456459

457460
if (is_a($this, Role::class)) {
458461
$this->forgetCachedPermissions();

src/Traits/HasRoles.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,14 @@ function ($object) use ($roles, $model, $teamPivot) {
180180
/**
181181
* Revoke the given role from the model.
182182
*
183-
* @param string|int|Role|\BackedEnum $role
183+
* @param string|string[]|int|Role|Role[]|\BackedEnum $role
184184
*/
185185
public function removeRole($role)
186186
{
187-
$this->roles()->detach($this->getStoredRole($role));
187+
$this->roles()->detach(array_map(
188+
fn ($item) => $this->getStoredRole($item)->getKey(),
189+
is_a($role, Collection::class) ? $role->all() : Arr::wrap($role)
190+
));
188191

189192
$this->unsetRelation('roles');
190193

tests/HasPermissionsTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,29 @@ public function it_can_scope_users_using_a_int()
147147
$this->assertEquals(2, $scopedUsers3->count());
148148
}
149149

150+
/** @test */
151+
public function it_can_scope_users_using_a_string_int()
152+
{
153+
User::all()->each(fn ($item) => $item->delete());
154+
$user1 = User::create(['email' => '[email protected]']);
155+
$user2 = User::create(['email' => '[email protected]']);
156+
$user3 = User::create(['email' => '[email protected]']);
157+
$user1->givePermissionTo(['1', '2']);
158+
$this->testUserRole->givePermissionTo('1');
159+
$user2->assignRole('testRole');
160+
161+
$scopedUsers1 = User::permission('1')->get();
162+
$scopedUsers2 = User::permission(['2'])->get();
163+
$scopedUsers3 = User::withoutPermission(['2'])->get();
164+
165+
$this->assertEquals(2, $scopedUsers1->count());
166+
$this->assertEquals(1, $scopedUsers2->count());
167+
$this->assertEquals(2, $scopedUsers3->count());
168+
169+
$user1->revokePermissionTo(['1']);
170+
$this->assertEquals(1, User::permission('1')->count());
171+
}
172+
150173
/** @test */
151174
public function it_can_scope_users_using_an_array()
152175
{

tests/HasPermissionsWithCustomModelsTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ public function it_can_scope_users_using_a_int()
6161
$this->assertTrue(true);
6262
}
6363

64+
/** @test */
65+
public function it_can_scope_users_using_a_string_int()
66+
{
67+
// Skipped because custom model uses uuid
68+
$this->assertTrue(true);
69+
}
70+
6471
/** @test */
6572
public function it_can_scope_users_using_a_uuid()
6673
{

tests/HasRolesTest.php

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,42 @@ public function it_can_assign_and_remove_a_role()
115115
$this->assertFalse($this->testUser->hasRole('testRole'));
116116
}
117117

118+
/** @test */
119+
public function it_can_assign_and_remove_a_role_using_different_datatypes()
120+
{
121+
$this->assertFalse($this->testUser->hasRole('testRole'));
122+
123+
$this->testUser->assignRole(1);
124+
$this->assertTrue($this->testUser->hasRole('testRole'));
125+
$this->testUser->removeRole(1);
126+
$this->assertFalse($this->testUser->hasRole('testRole'));
127+
128+
$this->testUser->assignRole('1');
129+
$this->assertTrue($this->testUser->hasRole('testRole'));
130+
$this->testUser->removeRole('1');
131+
$this->assertFalse($this->testUser->hasRole('testRole'));
132+
133+
$this->testUser->assignRole($this->testUserRole);
134+
$this->assertTrue($this->testUser->hasRole('testRole'));
135+
$this->testUser->removeRole($this->testUserRole);
136+
$this->assertFalse($this->testUser->hasRole('testRole'));
137+
138+
$this->testUser->assignRole([1]);
139+
$this->assertTrue($this->testUser->hasRole('testRole'));
140+
$this->testUser->removeRole([1]);
141+
$this->assertFalse($this->testUser->hasRole('testRole'));
142+
143+
$this->testUser->assignRole(['1']);
144+
$this->assertTrue($this->testUser->hasRole('testRole'));
145+
$this->testUser->removeRole(['1']);
146+
$this->assertFalse($this->testUser->hasRole('testRole'));
147+
148+
$this->testUser->assignRole([$this->testUserRole]);
149+
$this->assertTrue($this->testUser->hasRole('testRole'));
150+
$this->testUser->removeRole([$this->testUserRole]);
151+
$this->assertFalse($this->testUser->hasRole('testRole'));
152+
}
153+
118154
/** @test */
119155
public function it_removes_a_role_and_returns_roles()
120156
{
@@ -417,6 +453,32 @@ public function it_can_scope_users_using_a_string()
417453
$this->assertEquals(1, $scopedUsers->count());
418454
}
419455

456+
/** @test */
457+
public function it_can_scope_users_using_a_int()
458+
{
459+
$user1 = User::create(['email' => '[email protected]']);
460+
$user2 = User::create(['email' => '[email protected]']);
461+
$user1->assignRole(1);
462+
$user2->assignRole(2);
463+
464+
$scopedUsers = User::role(1)->get();
465+
466+
$this->assertEquals(1, $scopedUsers->count());
467+
}
468+
469+
/** @test */
470+
public function it_can_scope_users_using_a_string_int()
471+
{
472+
$user1 = User::create(['email' => '[email protected]']);
473+
$user2 = User::create(['email' => '[email protected]']);
474+
$user1->assignRole('1');
475+
$user2->assignRole('2');
476+
477+
$scopedUsers = User::role('1')->get();
478+
479+
$this->assertEquals(1, $scopedUsers->count());
480+
}
481+
420482
/** @test */
421483
public function it_can_withoutscope_users_using_a_string()
422484
{

tests/HasRolesWithCustomModelsTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,28 @@ public function it_can_use_custom_model_role()
3030
$this->assertSame(get_class($this->testUserRole), Role::class);
3131
}
3232

33+
/** @test */
34+
public function it_can_scope_users_using_a_int()
35+
{
36+
// Skipped because custom model uses uuid,
37+
// replacement "it_can_scope_users_using_a_uuid"
38+
$this->assertTrue(true);
39+
}
40+
41+
/** @test */
42+
public function it_can_scope_users_using_a_string_int()
43+
{
44+
// Skipped because custom model uses uuid
45+
$this->assertTrue(true);
46+
}
47+
48+
/** @test */
49+
public function it_can_assign_and_remove_a_role_using_different_datatypes()
50+
{
51+
// Skipped because custom model uses uuid
52+
$this->assertTrue(true);
53+
}
54+
3355
/** @test */
3456
public function it_doesnt_detach_permissions_when_soft_deleting()
3557
{

0 commit comments

Comments
 (0)