/** * 保存用户组设置 * * @param ORM_Admin_Member_Data $member * @param boolean $is_add */ protected function save_member_group_perm(ORM_Admin_Member_Data $member, $is_add) { $orm_group = new ORM_Admin_MemberGroup_Finder(); if ($this->change_to_super_admin) { # 超管不需要设置组,将提升为超管的用户的组给清理掉 $orm_group->db()->where('admin_id', $member->id)->delete($orm_group->ids_tablename()); } else { # 新组 $new_groups = $_POST['group_ids'] ? (array) $_POST['group_ids'] : array(); asort($new_groups); if ($is_add) { # 新创建的用户 # 添加的权限 $new_diff_group = $new_groups; # 删除掉的权限 $del_diff_group = array(); } else { # 旧组 $old_groups = $member->groups()->ids(); asort($old_groups); # 添加的权限 $new_diff_group = array_diff($new_groups, $old_groups); # 删除掉的权限 $del_diff_group = array_diff($old_groups, $new_groups); # 相同的组 $same_group = array_intersect($old_groups, $new_groups); if ($same_group) { # 更新 foreach ($same_group as $group_id) { $where = array('admin_id' => $member->id, 'group_id' => $group_id); $data = array('admin_id' => $member->id, 'group_id' => $group_id, 'view_users' => $_POST['manage_groups']['g' . $group_id]['view_users'] ? 1 : 0, 'edit_users' => $_POST['manage_groups']['g' . $group_id]['edit_users'] ? 1 : 0, 'edit_users_password' => $_POST['manage_groups']['g' . $group_id]['edit_users_password'] ? 1 : 0, 'add_user' => $_POST['manage_groups']['g' . $group_id]['add_user'] ? 1 : 0, 'del_user' => $_POST['manage_groups']['g' . $group_id]['del_user'] ? 1 : 0, 'remove_user' => $_POST['manage_groups']['g' . $group_id]['remove_user'] ? 1 : 0, 'shield_user' => $_POST['manage_groups']['g' . $group_id]['shield_user'] ? 1 : 0, 'liftshield_user' => $_POST['manage_groups']['g' . $group_id]['liftshield_user'] ? 1 : 0, 'edit_group' => $_POST['manage_groups']['g' . $group_id]['edit_group'] ? 1 : 0); $orm_group->db()->update($orm_group->ids_tablename(), $data, $where); } } } if ($new_diff_group) { foreach ($new_diff_group as $group_id) { $data = array('admin_id' => $member->id, 'group_id' => $group_id, 'view_users' => $_POST['manage_groups']['g' . $group_id]['view_users'] ? 1 : 0, 'edit_users' => $_POST['manage_groups']['g' . $group_id]['edit_users'] ? 1 : 0, 'edit_users_password' => $_POST['manage_groups']['g' . $group_id]['edit_users_password'] ? 1 : 0, 'add_user' => $_POST['manage_groups']['g' . $group_id]['add_user'] ? 1 : 0, 'del_user' => $_POST['manage_groups']['g' . $group_id]['del_user'] ? 1 : 0, 'remove_user' => $_POST['manage_groups']['g' . $group_id]['remove_user'] ? 1 : 0, 'shield_user' => $_POST['manage_groups']['g' . $group_id]['shield_user'] ? 1 : 0, 'liftshield_user' => $_POST['manage_groups']['g' . $group_id]['liftshield_user'] ? 1 : 0, 'edit_group' => $_POST['manage_groups']['g' . $group_id]['edit_group'] ? 1 : 0); $orm_group->db()->values($data); } $orm_group->db()->columns(array_keys($data))->insert($orm_group->ids_tablename()); } if ($del_diff_group) { $orm_group->db()->where('admin_id', $member->id)->in('group_id', $del_diff_group)->delete($orm_group->ids_tablename()); } } }
/** * 删除权限组 * * @param int $group_id */ public function action_delete($group_id = 0) { $orm_group = new ORM_Admin_MemberGroup_Finder(); if (!$group_id > 0) { $this->message('缺少参数', -1); } $group = $orm_group->get_by_id($group_id); if (!$group) { $this->message('指定的权限组不存在,可能已被删除', -1); $group = new ORM_Admin_MemberGroup_Data(); } if (!$this->session()->member()->perm()->is_own('administrator.delete_group')) { $this->message('您不具备删除该权限组的权限', -1); } if ($group->project != Core::$project && !$this->session()->member()->perm()->is_super_perm()) { # 夸项目操作,只有超管才可以执行 $this->message('您不可通过此URL执行本次操作', -1); } if ($group->members()->count()) { $this->message('此权限组含有成员,无法删除。请先清空该权限组成员后再删除', -1); } $status = $group->delete(); if ($status) { $this->message('删除成功。', 1); } else { $this->message('未删除', 0); } }
/** * 删除当前管理员 * * @see OOP_ORM_Data::delete() * @return integer 操作行数 * @throws Exception */ public function delete() { $id = $this->id; $rs = parent::delete(); if ($rs) { # 删除管理员对应的用户组设置 $orm_group = new ORM_Admin_MemberGroup_Finder(); $orm_group->db()->where('admin_id', $id)->delete($orm_group->ids_tablename()); } return $rs; }
/** * 获取管理组列表数据 * * @param int $offset * @param int $limit * @return \ORM_Admin_MemberGroup_Result */ public function get_group_list($project = null, $offset = 0, $limit = 20) { $orm_group = new \ORM_Admin_MemberGroup_Finder(); if ($project) { $orm_group->driver()->where('project', $project); } if ($limit) { $orm_group->driver()->limit($limit)->offset($offset); } $orm_group->driver()->from('admin_member_group')->order_by('sort', 'DESC'); return $orm_group->find(); }
/** * 获取管理组列表数据 * * @param int $offset * @param int $limit * @return ORM_Admin_MemberGroup_Result */ public function get_group_list($project = null, $offset = 0, $limit = 20) { $orm_group = new ORM_Admin_MemberGroup_Finder(); if ($project) { $orm_group->driver()->where('project', $project); } if ($limit) { $orm_group->driver()->limit($limit)->offset($offset); } $orm_group->driver()->from($this->config['group']['tablename'])->order_by('sort', 'DESC'); return $orm_group->find(); }