UserService 查詢使用者沒許可權的索引,增加臨時許可權queryIndicesNoPermission分析

一曲微茫發表於2024-11-21

好的,根據您提供的 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. 返回響應物件:返回包含查詢結果的響應物件。

透過這個方法,可以有效地查詢使用者無許可權的索引模式,確保系統能夠正確地管理和驗證使用者的許可權。

相關文章