/** * Setting User role into database for the corresponding user and then load user role whenever that user is loaded. * @param array of integers $user_role User is defining their access permission through this user role */ public function set_user_role($user_roles) { Logger::log("Enter: function User::add_user_role"); if (!$this->is_active) { throw new PAException(OPERATION_NOT_PERMITTED, "User is already been deleted"); } if (empty($user_roles)) { throw new PAException(REQUIRED_PARAMETERS_MISSING, "Required variable not specified"); } // Inserting user roles for corresponding user_id. for ($i = 0; $i < count($user_roles); $i++) { $role_info = Roles::getRoleInfoByID((int) $user_roles[$i]['role_id']); $sql = 'SELECT * FROM {users_roles} WHERE user_id = ? AND role_id = ?'; $data = array($this->user_id, $user_roles[$i]['role_id']); $res = Dal::query($sql, $data); $row = $res->fetchRow(DB_FETCHMODE_OBJECT); if (!empty($row) && is_object($row)) { // role exists - just update role extra info if (!empty($user_roles[$i]['extra'])) { if ($role_info['type'] == 'group') { $existing_extra = !empty($row->extra) ? unserialize($row->extra) : array(); $new_extra = unserialize($user_roles[$i]['extra']); foreach ($new_extra['groups'] as $grp) { if (empty($existing_extra['groups'])) { $existing_extra['groups'] = array((int) $grp); } else { foreach ($existing_extra['groups'] as $_i => $_v) { $existing_extra['groups'][$_i] = (int) $_v; } if (!in_array((int) $grp, $existing_extra['groups'])) { array_push($existing_extra['groups'], (int) $grp); } } } $user_roles[$i]['extra'] = serialize($existing_extra); } $sql = 'UPDATE {users_roles} SET extra = ? WHERE user_id = ? AND role_id = ?'; $data = array($user_roles[$i]['extra'], $this->user_id, $user_roles[$i]['role_id']); } } else { // role does not exists - assign new role if (empty($user_roles[$i]['extra'])) { // if extra info is empty - set default extras for new user role $user_roles[$i]['extra'] = array('user' => true, 'network' => true, 'groups' => array()); } $sql = 'INSERT into {users_roles} (user_id, role_id, extra) values (?, ?, ?)'; $data = array($this->user_id, $user_roles[$i]['role_id'], $user_roles[$i]['extra']); } Dal::query($sql, $data); } Logger::log("Exit: function User::add_user_role"); }
public function importRolesInfo() { $roles = new Roles(); $roles_data = array(); $roles_info = $roles->get_multiple(null, DB_FETCHMODE_ASSOC); foreach ($roles_info as &$role) { $roles_data[] = Roles::getRoleInfoByID($role['id'], DB_FETCHMODE_ASSOC); } return $roles_data; }
private function restoreRoleSettings($restore_roles, $_msg = null) { try { if (count($restore_roles) > 0) { $roles = new Roles(); $roles_info = $roles->get_multiple(null); foreach ($roles_info as $_role) { $role = $roles->get($_role->id); if (is_object($role)) { if (!$role->read_only) { $roles->delete((int) $_role->id); } } } foreach ($restore_roles as $role) { $_role = Roles::getRoleInfoByID($role['id'], $fetch_mode = DB_FETCHMODE_ASSOC); if (isset($_role['id'])) { // existing role, need to update only $new_role = new Roles(); $new_role->id = $role['id']; $new_role->description = $role['description']; $new_role->name = $role['name']; $new_role->type = $role['type']; $new_role->update(); Roles::delete_role_tasks($new_role->id); if (!empty($role['tasks'])) { $tasks = array(); foreach ($role['tasks'] as $task) { $tasks[] = $task['id']; } Roles::assign_tasks_to_role($tasks, $new_role->id); } } else { $new_role = new Roles(); $new_role->description = $role['description']; $new_role->name = $role['name']; $role_id = $new_role->create(); if ($role_id && !empty($role['tasks'])) { $tasks = array(); foreach ($role['tasks'] as $task) { $tasks[] = $task['id']; } Roles::assign_tasks_to_role($tasks, $role_id); } } } $error_msg = $_msg ? $_msg : __('Default Roles settings sucessfully restored.'); } else { $error_msg = __('There is no Roles data in default XML settings file.'); } } catch (Exception $e) { $error = TRUE; $error_msg = $e->getMessage(); } return $error_msg; }