Skip to content

Commit f2f476c

Browse files
authored
Merge pull request #2851 from erikn69/revert-2840-remove-unnecessary-call
Revert "Remove `collectPermissions` that is not being assigned"
2 parents 68f9b48 + e645076 commit f2f476c

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

phpstan.neon.dist

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@ parameters:
1717
# wildcard permissions:
1818
- '#Call to an undefined method Illuminate\\Database\\Eloquent\\Model::getWildcardClass#'
1919
- '#Call to an undefined method Illuminate\\Database\\Eloquent\\Model::getAllPermissions#'
20+
# contract checks:
21+
- '#Call to function is_a\(\) with (.*) and ''Spatie\\\\Permission\\\\Contracts\\\\Permission'' will always evaluate to true\.$#'
22+
- '#Call to function is_a\(\) with (.*) and ''Spatie\\\\Permission\\\\Contracts\\\\Role'' will always evaluate to true\.$#'

src/Traits/HasPermissions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ public function forgetWildcardPermissionIndex(): void
450450
public function syncPermissions(...$permissions)
451451
{
452452
if ($this->getModel()->exists) {
453+
$this->collectPermissions($permissions);
453454
$this->permissions()->detach();
454455
$this->setRelation('permissions', collect());
455456
}

tests/HasPermissionsTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,23 @@ public function it_can_avoid_sync_duplicated_permissions()
611611
$this->assertTrue($this->testUser->hasDirectPermission('edit-blog'));
612612
}
613613

614+
/** @test */
615+
#[Test]
616+
public function it_can_avoid_detach_on_permission_that_does_not_exist_sync()
617+
{
618+
$this->testUser->syncPermissions('edit-articles');
619+
620+
try {
621+
$this->testUser->syncPermissions('permission-does-not-exist');
622+
$this->fail('Expected PermissionDoesNotExist exception was not thrown.');
623+
} catch (PermissionDoesNotExist $e){
624+
//
625+
}
626+
627+
$this->assertTrue($this->testUser->hasDirectPermission('edit-articles'));
628+
$this->assertFalse($this->testUser->checkPermissionTo('permission-does-not-exist'));
629+
}
630+
614631
/** @test */
615632
#[Test]
616633
public function it_can_sync_multiple_permissions_by_id()

tests/HasRolesTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,23 @@ public function it_can_avoid_sync_duplicated_roles()
318318
$this->assertTrue($this->testUser->hasRole('testRole2'));
319319
}
320320

321+
/** @test */
322+
#[Test]
323+
public function it_can_avoid_detach_on_role_that_does_not_exist_sync()
324+
{
325+
$this->testUser->syncRoles('testRole');
326+
327+
try {
328+
$this->testUser->syncRoles('role-does-not-exist');
329+
$this->fail('Expected RoleDoesNotExist exception was not thrown.');
330+
} catch (RoleDoesNotExist $e){
331+
//
332+
}
333+
334+
$this->assertTrue($this->testUser->hasRole('testRole'));
335+
$this->assertFalse($this->testUser->hasRole('role-does-not-exist'));
336+
}
337+
321338
/** @test */
322339
#[Test]
323340
public function it_can_sync_multiple_roles()

0 commit comments

Comments
 (0)