Skip to content

Commit 7a39f04

Browse files
feat: cover permission instance verification based on its own guard (#2608)
1 parent 96c2761 commit 7a39f04

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

src/Traits/HasPermissions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ protected function hasWildcardPermission($permission, $guardName = null): bool
231231
}
232232

233233
if ($permission instanceof Permission) {
234+
$guardName = $permission->guard_name ?? $guardName;
234235
$permission = $permission->name;
235236
}
236237

tests/HasPermissionsTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@ public function it_can_assign_a_permission_to_a_user()
2020
$this->assertTrue($this->testUser->hasPermissionTo($this->testUserPermission));
2121
}
2222

23+
24+
/** @test */
25+
public function it_can_assign_a_permission_to_a_user_with_a_non_default_guard()
26+
{
27+
$testUserPermission = app(Permission::class)->create([
28+
'name' => 'edit-articles',
29+
'guard_name' => 'api',
30+
]);
31+
32+
$this->testUser->givePermissionTo($testUserPermission);
33+
34+
$this->assertTrue($this->testUser->hasPermissionTo($testUserPermission));
35+
}
36+
2337
/** @test */
2438
public function it_throws_an_exception_when_assigning_a_permission_that_does_not_exist()
2539
{

tests/WildcardHasPermissionsTest.php

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,47 @@ public function it_can_check_wildcard_permission()
3131
$this->assertFalse($user1->hasPermissionTo('projects.view'));
3232
}
3333

34+
/** @test */
35+
public function it_can_check_wildcard_permission_for_a_non_default_guard()
36+
{
37+
app('config')->set('permission.enable_wildcard_permission', true);
38+
39+
$user1 = User::create(['email' => '[email protected]']);
40+
41+
$permission1 = Permission::create(['name' => 'articles.edit,view,create', 'guard_name' => 'api']);
42+
$permission2 = Permission::create(['name' => 'news.*', 'guard_name' => 'api']);
43+
$permission3 = Permission::create(['name' => 'posts.*', 'guard_name' => 'api']);
44+
45+
$user1->givePermissionTo([$permission1, $permission2, $permission3]);
46+
47+
$this->assertTrue($user1->hasPermissionTo('posts.create', 'api'));
48+
$this->assertTrue($user1->hasPermissionTo('posts.create.123', 'api'));
49+
$this->assertTrue($user1->hasPermissionTo('posts.*', 'api'));
50+
$this->assertTrue($user1->hasPermissionTo('articles.view', 'api'));
51+
$this->assertFalse($user1->hasPermissionTo('projects.view', 'api'));
52+
}
53+
54+
/** @test */
55+
public function it_can_check_wildcard_permission_from_instance_without_explicit_guard_argument()
56+
{
57+
app('config')->set('permission.enable_wildcard_permission', true);
58+
59+
$user1 = User::create(['email' => '[email protected]']);
60+
61+
$permission2 = Permission::create(['name' => 'articles.view']);
62+
$permission1 = Permission::create(['name' => 'articles.edit', 'guard_name' => 'api']);
63+
$permission3 = Permission::create(['name' => 'news.*', 'guard_name' => 'api']);
64+
$permission4 = Permission::create(['name' => 'posts.*', 'guard_name' => 'api']);
65+
66+
$user1->givePermissionTo([$permission1, $permission2, $permission3]);
67+
68+
$this->assertTrue($user1->hasPermissionTo($permission1));
69+
$this->assertTrue($user1->hasPermissionTo($permission2));
70+
$this->assertTrue($user1->hasPermissionTo($permission3));
71+
$this->assertFalse($user1->hasPermissionTo($permission4));
72+
$this->assertFalse($user1->hasPermissionTo('articles.edit'));
73+
}
74+
3475
/**
3576
* @test
3677
*

0 commit comments

Comments
 (0)