UserService 查询用户没权限的索引,增加临时权限queryIndicesNoPermission分析

好的,根据您提供的 userService.docx 文档内容,我提取了 queryIndicesNoPermission 方法,并对其进行详细分析。以下是提取的方法及其相关部分:

提取的 queryIndicesNoPermission 方法

@Override
public QueryIndicesNoPermissionResponse queryIndicesNoPermission(QueryIndicesNoPermissionRequest request) {
    String userName = request.getUserName();
    QueryIndicesNoPermissionResponse response = new QueryIndicesNoPermissionResponse();
    if (StringUtils.isEmpty(userName)) {
        log.error("查询用户关联索引请求参数为空");
        throw new TitanException("所传参数为空!");
    }
    Example example = new Example(UserConfig.class);
    example.createCriteria().andEqualTo("userName", userName);
    UserConfig userConfig = userConfigMapper.selectOneByExample(example);
    List<String> userNameList = new ArrayList<>();
    userNameList.add(userName);
    QueryFinTechUserRequest userRequest = new QueryFinTechUserRequest();
    userRequest.setUserNameList(userNameList);
    UserInfoResponse userInfoResponse = finTechDataProviderService.queryFinTechUserInfo(userRequest);
    String departmentId = userInfoResponse.getUserList().get(0).getOrgId();
    Department department = departmentService.getDepartmentById(departmentId);
    if ((userConfig != null && userConfig.getGlobalQuery()) || (department != null && department.getGlobalQuery())) {
        response.setErrMsg("用户是全查询用户, 无需申请临时权限!");
        return response;
    }
    PageHelper.startPage(request.getPageIndex(), request.getLimit());
    PageInfo<IndexPattern> pageInfo = new PageInfo<>(indexPatternMapper.queryIndicesNoPermission(userName, departmentId, request.getIndexName(), request.getSystemIdList(), request.getApplicationName()));
    response.setTotal(pageInfo.getTotal());
    List<IndexPatternItem> indexPatternItemList = new ArrayList<>();
    pageInfo.getList().forEach(indexPattern -> {
        IndexPatternItem indexPatternItem = new IndexPatternItem();
        indexPatternItem.setId(indexPattern.getId());
        indexPatternItem.setIndexPatternName(indexPattern.getIndexPatternName());
        indexPatternItem.setApplicationName(indexPattern.getApplicationName());
        indexPatternItem.setSystemId(indexPattern.getSystemId());
        indexPatternItemList.add(indexPatternItem);
    });
    response.setIndicesList(indexPatternItemList);
    response.setSuccess();
    return response;
}

方法分析

输入参数

  • QueryIndicesNoPermissionRequest request:包含请求参数,主要包括 userName(用户名)、pageIndex(页码)、limit(每页大小)、indexName(索引名称)、systemIdList(系统ID列表)和 applicationName(应用名称)。

输出参数

  • QueryIndicesNoPermissionResponse response:包含查询结果的响应对象,主要字段有 total(总记录数)、indicesList(索引模式项列表)和 errMsg(错误信息)。

方法步骤

  1. 创建响应对象

    QueryIndicesNoPermissionResponse response = new QueryIndicesNoPermissionResponse();
    
  2. 参数校验

    if (StringUtils.isEmpty(userName)) {
        log.error("查询用户关联索引请求参数为空");
        throw new TitanException("所传参数为空!");
    }
    
    • 检查 userName 是否为空字符串,如果为空则抛出异常。
  3. 查询用户配置

    Example example = new Example(UserConfig.class);
    example.createCriteria().andEqualTo("userName", userName);
    UserConfig userConfig = userConfigMapper.selectOneByExample(example);
    
    • 创建一个 Example 对象,用于构建查询条件。
    • 设置查询条件为用户名等于 userName
    • 调用 userConfigMapper.selectOneByExample 方法查询用户配置信息。
  4. 查询用户部门信息

    List<String> userNameList = new ArrayList<>();
    userNameList.add(userName);
    QueryFinTechUserRequest userRequest = new QueryFinTechUserRequest();
    userRequest.setUserNameList(userNameList);
    UserInfoResponse userInfoResponse = finTechDataProviderService.queryFinTechUserInfo(userRequest);
    String departmentId = userInfoResponse.getUserList().get(0).getOrgId();
    Department department = departmentService.getDepartmentById(departmentId);
    
    • 创建一个 List<String> 对象 userNameList,并将 userName 添加到列表中。
    • 创建一个 QueryFinTechUserRequest 对象 userRequest,并设置用户名列表。
    • 调用 finTechDataProviderService.queryFinTechUserInfo 方法查询用户信息。
    • 获取用户的部门ID。
    • 调用 departmentService.getDepartmentById 方法查询部门信息。
  5. 检查全局查询权限

    if ((userConfig != null && userConfig.getGlobalQuery()) || (department != null && department.getGlobalQuery())) {
        response.setErrMsg("用户是全查询用户, 无需申请临时权限!");
        return response;
    }
    
    • 检查用户或其所在部门是否有全局查询权限。
    • 如果用户或部门有全局查询权限,设置响应对象的错误信息并返回。
  6. 分页查询无权限索引

    PageHelper.startPage(request.getPageIndex(), request.getLimit());
    PageInfo<IndexPattern> pageInfo = new PageInfo<>(indexPatternMapper.queryIndicesNoPermission(userName, departmentId, request.getIndexName(), request.getSystemIdList(), request.getApplicationName()));
    
    • 使用 PageHelper 开始分页查询。
    • 调用 indexPatternMapper.queryIndicesNoPermission 方法查询用户无权限的索引模式。
    • 创建一个 PageInfo 对象 pageInfo,用于存储查询结果。
  7. 设置响应对象

    response.setTotal(pageInfo.getTotal());
    List<IndexPatternItem> indexPatternItemList = new ArrayList<>();
    pageInfo.getList().forEach(indexPattern -> {
        IndexPatternItem indexPatternItem = new IndexPatternItem();
        indexPatternItem.setId(indexPattern.getId());
        indexPatternItem.setIndexPatternName(indexPattern.getIndexPatternName());
        indexPatternItem.setApplicationName(indexPattern.getApplicationName());
        indexPatternItem.setSystemId(indexPattern.getSystemId());
        indexPatternItemList.add(indexPatternItem);
    });
    response.setIndicesList(indexPatternItemList);
    response.setSuccess();
    
    • 设置响应对象的总记录数。
    • 遍历查询结果,将每个索引模式转换为 IndexPatternItem 对象并添加到列表中。
    • 将索引模式项列表设置到响应对象的 indicesList 字段中。
    • 设置响应对象的操作成功标志。
  8. 返回响应对象

    return response;
    

详细分析

1. 参数校验

  • 用户名校验:确保 userName 不为空字符串。

2. 查询用户配置

  • 查询用户:创建查询条件并调用 userConfigMapper.selectOneByExample 方法查询用户配置信息。

3. 查询用户部门信息

  • 查询用户信息:创建请求对象并调用 finTechDataProviderService.queryFinTechUserInfo 方法查询用户信息。
  • 获取部门信息:获取用户的部门ID并调用 departmentService.getDepartmentById 方法查询部门信息。

4. 检查全局查询权限

  • 权限检查:检查用户或其所在部门是否有全局查询权限,如果有则设置错误信息并返回。

5. 分页查询无权限索引

  • 分页查询:使用 PageHelper 开始分页查询,并调用 indexPatternMapper.queryIndicesNoPermission 方法查询用户无权限的索引模式。
  • 创建分页对象:创建 PageInfo 对象存储查询结果。

6. 设置响应对象

  • 设置总记录数:设置响应对象的总记录数。
  • 转换索引模式:遍历查询结果,将每个索引模式转换为 IndexPatternItem 对象并添加到列表中。
  • 设置索引模式项列表:将索引模式项列表设置到响应对象的 indicesList 字段中。
  • 设置成功标志:设置响应对象的操作成功标志。

7. 返回响应对象

  • 返回结果:返回包含查询结果的响应对象。

总结

queryIndicesNoPermission 方法的主要功能是查询用户无权限的索引模式列表。具体步骤包括:

  1. 参数校验:确保请求参数不为空。
  2. 查询用户配置:查询用户配置信息。
  3. 查询用户部门信息:查询用户信息和部门信息。
  4. 检查全局查询权限:检查用户或部门是否有全局查询权限,如果有则设置错误信息并返回。
  5. 分页查询无权限索引:使用分页查询用户无权限的索引模式。
  6. 设置响应对象:设置响应对象的查询结果和成功标志。
  7. 返回响应对象:返回包含查询结果的响应对象。

通过这个方法,可以有效地查询用户无权限的索引模式,确保系统能够正确地管理和验证用户的权限。

posted @ 2024-11-21 01:08  一曲微茫  阅读(3)  评论(0编辑  收藏  举报