public function updateUserGroups($userID, array $groupIDs) { $userGroups = \Sentinel::getUserGroupProvider()->findGroupsByUserID($userID)->pluck('group_id')->toArray(); $groupsHaveChanged = false; $groupsToAdd = array_diff($groupIDs, $userGroups); if (!empty($groupsToAdd)) { $groupsHaveChanged = true; foreach ($groupsToAdd as $newUserGroup) { \Sentinel::getUserGroupProvider()->attach($userID, $newUserGroup); \Sentinel::getPermissionProvider()->addUserGroupPermissions($userID, $newUserGroup); } } $groupsToRemove = array_diff($userGroups, $groupIDs); if (!empty($groupsToRemove)) { $groupsHaveChanged = true; foreach ($groupsToRemove as $oldUserGroup) { \Sentinel::getUserGroupProvider()->detach($userID, $oldUserGroup); \Sentinel::getPermissionProvider()->removeUserGroupPermissions($userID, $oldUserGroup); } } return $groupsHaveChanged; }
/** * Updating a user and his person table + group table info. * * @param int $id * @param array $data * * @return void */ public function updateUser($id, array $data) { if (!empty($id) && !empty($data)) { $this->createModel()->newQuery()->where('id', $id)->update(array('name' => $data['name'], 'email' => $data['email'])); unset($data['name'], $data['email']); $personID = \Spirit::getPersonProvider()->getPersonByUserId($id)->select(['id as user_id'])->value('user_id'); if (!is_null($personID)) { if (!isset($data['groups'])) { $data['groups'] = []; } $groupsHaveChanged = \Sentinel::getGroupProvider()->updateUserGroups($id, $data['groups']); if ($groupsHaveChanged === true) { \Sentinel::getPermissionProvider()->updateUserGroupPermissions($id, $data['groups']); } unset($data['groups']); \Spirit::getPersonProvider()->updatePerson($personID, $data); } else { throw new \UnexpectedValueException('User ' . $id . ' not found for update'); } } else { throw new \UnexpectedValueException('Invalid data for user update'); } }