好的,根據您提供的 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
方法的主要功能是查詢使用者無許可權的索引模式列表。具體步驟包括:
- 引數校驗:確保請求引數不為空。
- 查詢使用者配置:查詢使用者配置資訊。
- 查詢使用者部門資訊:查詢使用者資訊和部門資訊。
- 檢查全域性查詢許可權:檢查使用者或部門是否有全域性查詢許可權,如果有則設定錯誤資訊並返回。
- 分頁查詢無許可權索引:使用分頁查詢使用者無許可權的索引模式。
- 設定響應物件:設定響應物件的查詢結果和成功標誌。
- 返回響應物件:返回包含查詢結果的響應物件。
透過這個方法,可以有效地查詢使用者無許可權的索引模式,確保系統能夠正確地管理和驗證使用者的許可權。