Skip to content

Commit c24211a

Browse files
authored
fix duplicates on sync (#2574)
1 parent b6b9f4f commit c24211a

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

src/Traits/HasPermissions.php

+4-3
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,10 @@ private function collectPermissions(...$permissions): array
370370
return $array;
371371
}
372372

373-
$this->ensureModelSharesGuard($permission);
374-
375-
$array[] = $permission->getKey();
373+
if (! in_array($permission->getKey(), $array)) {
374+
$this->ensureModelSharesGuard($permission);
375+
$array[] = $permission->getKey();
376+
}
376377

377378
return $array;
378379
}, []);

src/Traits/HasRoles.php

+4-3
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,10 @@ private function collectRoles(...$roles): array
129129
return $array;
130130
}
131131

132-
$this->ensureModelSharesGuard($role);
133-
134-
$array[] = $role->getKey();
132+
if (! in_array($role->getKey(), $array)) {
133+
$this->ensureModelSharesGuard($role);
134+
$array[] = $role->getKey();
135+
}
135136

136137
return $array;
137138
}, []);

tests/HasPermissionsTest.php

+10
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,16 @@ public function it_can_sync_multiple_permissions()
541541
$this->assertFalse($this->testUser->hasDirectPermission('edit-news'));
542542
}
543543

544+
/** @test */
545+
public function it_can_avoid_sync_duplicated_permissions()
546+
{
547+
$this->testUser->syncPermissions('edit-articles', 'edit-blog', 'edit-blog');
548+
549+
$this->assertTrue($this->testUser->hasDirectPermission('edit-articles'));
550+
551+
$this->assertTrue($this->testUser->hasDirectPermission('edit-blog'));
552+
}
553+
544554
/** @test */
545555
public function it_can_sync_multiple_permissions_by_id()
546556
{

tests/HasRolesTest.php

+10
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,16 @@ public function it_can_sync_roles_from_a_string_on_a_permission()
259259
$this->assertTrue($this->testUserPermission->hasRole('testRole2'));
260260
}
261261

262+
/** @test */
263+
public function it_can_avoid_sync_duplicated_roles()
264+
{
265+
$this->testUser->syncRoles('testRole', 'testRole', 'testRole2');
266+
267+
$this->assertTrue($this->testUser->hasRole('testRole'));
268+
269+
$this->assertTrue($this->testUser->hasRole('testRole2'));
270+
}
271+
262272
/** @test */
263273
public function it_can_sync_multiple_roles()
264274
{

0 commit comments

Comments
 (0)