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
(错误信息)。
方法步骤
-
创建响应对象:
QueryIndicesNoPermissionResponse response = new QueryIndicesNoPermissionResponse();
-
参数校验:
if (StringUtils.isEmpty(userName)) { log.error("查询用户关联索引请求参数为空"); throw new TitanException("所传参数为空!"); }
- 检查
userName
是否为空字符串,如果为空则抛出异常。
- 检查
-
查询用户配置:
Example example = new Example(UserConfig.class); example.createCriteria().andEqualTo("userName", userName); UserConfig userConfig = userConfigMapper.selectOneByExample(example);
- 创建一个
Example
对象,用于构建查询条件。 - 设置查询条件为用户名等于
userName
。 - 调用
userConfigMapper.selectOneByExample
方法查询用户配置信息。
- 创建一个
-
查询用户部门信息:
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
方法查询部门信息。
- 创建一个
-
检查全局查询权限:
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()));
- 使用
PageHelper
开始分页查询。 - 调用
indexPatternMapper.queryIndicesNoPermission
方法查询用户无权限的索引模式。 - 创建一个
PageInfo
对象pageInfo
,用于存储查询结果。
- 使用
-
设置响应对象:
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
字段中。 - 设置响应对象的操作成功标志。
-
返回响应对象:
return response;
详细分析
1. 参数校验
- 用户名校验:确保
userName
不为空字符串。
2. 查询用户配置
- 查询用户:创建查询条件并调用
userConfigMapper.selectOneByExample
方法查询用户配置信息。
3. 查询用户部门信息
- 查询用户信息:创建请求对象并调用
finTechDataProviderService.queryFinTechUserInfo
方法查询用户信息。 - 获取部门信息:获取用户的部门ID并调用
departmentService.getDepartmentById
方法查询部门信息。
4. 检查全局查询权限
- 权限检查:检查用户或其所在部门是否有全局查询权限,如果有则设置错误信息并返回。
5. 分页查询无权限索引
- 分页查询:使用
PageHelper
开始分页查询,并调用indexPatternMapper.queryIndicesNoPermission
方法查询用户无权限的索引模式。 - 创建分页对象:创建
PageInfo
对象存储查询结果。
6. 设置响应对象
- 设置总记录数:设置响应对象的总记录数。
- 转换索引模式:遍历查询结果,将每个索引模式转换为
IndexPatternItem
对象并添加到列表中。 - 设置索引模式项列表:将索引模式项列表设置到响应对象的
indicesList
字段中。 - 设置成功标志:设置响应对象的操作成功标志。
7. 返回响应对象
- 返回结果:返回包含查询结果的响应对象。
总结
queryIndicesNoPermission
方法的主要功能是查询用户无权限的索引模式列表。具体步骤包括:
- 参数校验:确保请求参数不为空。
- 查询用户配置:查询用户配置信息。
- 查询用户部门信息:查询用户信息和部门信息。
- 检查全局查询权限:检查用户或部门是否有全局查询权限,如果有则设置错误信息并返回。
- 分页查询无权限索引:使用分页查询用户无权限的索引模式。
- 设置响应对象:设置响应对象的查询结果和成功标志。
- 返回响应对象:返回包含查询结果的响应对象。
通过这个方法,可以有效地查询用户无权限的索引模式,确保系统能够正确地管理和验证用户的权限。