/** * @param int $userID * @param array $groupIDs */ public function updateUserGroupPermissions($userID, array $groupIDs) { $permissionUser = $this->createModel()->getPermissionActions($userID)->pluck('permission_action_id', 'permission_id'); $permissionGroup = $this->createModel()->getPermissionActions($groupIDs, null, 'group')->pluck('permission_action_id', 'permission_id')->unique(); //We add permissions that the group has but the user doesn't. $permissionsToAdd = $permissionGroup->diff($permissionUser); if (!$permissionsToAdd->isEmpty()) { foreach ($permissionsToAdd as $actionID) { $this->addUserPermission($userID, $actionID); } } //We remove permissions the user has that the group doesn't. $permissionsToRemove = $permissionUser->diff($permissionGroup); if (!$permissionsToRemove->isEmpty()) { PermissionUser::deletePermissionUsers($permissionsToRemove->keys()->toArray()); } }