* @date 2020/6/6 */ public function dataRange($roles = []) { if (Utils::isSuperAdmin()) { return $this; } $userIds = $this->getDepartmentUserIdsBy($roles); if (empty($userIds)) { return $this; } // 根据 creator_id 过滤 $query = $this->whereIn($this->aliasField('creator_id'), $userIds); // 根据 area_id 过滤 if ( $this->name == 'users' ) { return $query; } return $query; } /** * 获取部门IDs * * @param $roles * @return array * @author JaguarJack * @date 2020/6/6 */ public function getDepartmentUserIdsBy($roles) { $userIds = []; $isAll = false; $user = request()->user(); if (empty($roles)) { $roles = $user->getRoles(); } foreach ($roles as $role) { switch ($role->data_range) { case Roles::ALL_DATA: $isAll = true; break; case Roles::SELF_CHOOSE: $departmentIds = array_merge(array_column($role->getDepartments()->toArray(), 'id')); $userIds = array_merge($userIds, $this->getUserIdsByDepartmentId($departmentIds)); break; case Roles::SELF_DATA: $userIds[] = $user->id; break; case Roles::DEPARTMENT_DOWN_DATA: // 查一下下级部门 $departmentIds = Department::where('parent_id', $user->department_id)->column('id'); $departmentIds[] = $user->department_id; $userIds = array_merge([$user->id], $this->getUserIdsByDepartmentId($departmentIds)); break; case Roles::DEPARTMENT_DATA: $userIds = array_merge($userIds, $this->getUserIdsByDepartmentId([$user->department_id])); break; default: break; } // 如果有全部数据 直接跳出 if ($isAll) { break; } } return $userIds; } /** * 获取UserID * * @time 2020年07月04日 * @param $id * @return array */ protected function getUserIdsByDepartmentId(array $id) { return Users::whereIn('department_id', $id)->column('id'); } /** * 获取管理区域 */ public function getManageAreaIds() { $area_ids = request()->user()->area_id; if (empty($area_ids)) { return ''; } $area_arr = json_decode($area_ids, true); if (empty($area_arr)) { return ''; } $area_ids = join(',', $area_arr); $ids = Db::table('area')->whereIn('id|province_id|city_id|district_id', $area_ids)->column('id'); $ids = array_merge($area_arr, $ids); $areasIds = Db::table('areas')->whereIn('parent_id', $area_ids)->column('id'); $ids = array_merge($areasIds, $ids); return $ids; } //获取授课班级 public function getTeachClassIds() { $class_ids = request()->user()->classes; if ($class_ids) { return json_decode($class_ids); } return []; } //获取管理班级 public function getManageClassIds() { $class_ids = request()->user()->manage_classes; if ($class_ids) { return json_decode($class_ids); } return []; } }