* @date 2020/6/6 */ protected function scopeDataRange($roles) { return $this->whereIn($this->aliasField('creator_id'), $this->getDepartmentUserIdsBy($roles)); } /** * 获取部门IDs * * @param $roles * @return array * @author JaguarJack * @date 2020/6/6 */ public function getDepartmentUserIdsBy($roles) { $userIds = []; $isAll = false; $user = request()->user(); 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, Users::getUserIdsByDepartmentIds($departmentIds)); break; case Roles::SELF_DATA: $userIds[] = $user->id; break; case Roles::DEPARTMENT_DOWN_DATA: case Roles::DEPARTMENT_DATA: $userIds = array_merge($userIds, Users::getUserIdsByDepartmentIds([$user->department_id])); break; default: break; } // 如果有全部数据 直接跳出 if ($isAll) { break; } } return $userIds; } }