diff --git a/src/Traits/HasRoles.php b/src/Traits/HasRoles.php index 42de6d2..30625d2 100644 --- a/src/Traits/HasRoles.php +++ b/src/Traits/HasRoles.php @@ -113,11 +113,23 @@ public function assignRole(...$roles) /** * Revoke the given role from the model. * - * @param string|Role $role + * @param array|string|Role ...$roles + * + * @return HasRoles */ - public function removeRole($role) + public function removeRole(...$roles) { - $this->roles()->detach($this->getStoredRole($role)); + \collect($roles) + ->flatten() + ->map(function ($role) { + $role = $this->getStoredRole($role); + $this->roles()->detach($this->getStoredRole($role)); + return $role; + }); + + $this->forgetCachedPermissions(); + + return $this; } /** diff --git a/tests/HasRolesTest.php b/tests/HasRolesTest.php index 739053f..63ceb90 100644 --- a/tests/HasRolesTest.php +++ b/tests/HasRolesTest.php @@ -495,4 +495,17 @@ public function it_does_not_detach_roles_when_soft_deleting() $user = SoftDeletingUser::withTrashed()->find($user->id); $this->assertTrue($user->hasRole('testRole')); } + + /** @test */ + public function it_can_give_and_revoke_multiple_roles() + { + $this->testUser->assignRole('testRole'); + $this->testUser->assignRole('testRole2'); + + $this->testUser->removeRole('testRole', 'testRole2'); + + $this->assertFalse($this->testUser->hasRole('testRole')); + + $this->assertFalse($this->testUser->hasRole('testRole2')); + } }