UserService 修改使用者查詢許可權 changeGlobalQuery分析

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

好的,根據您提供的 userService.docx 文件內容,我提取了 changeGlobalQuery 方法,並對其進行詳細分析。以下是提取的方法及其相關部分:

提取的 changeGlobalQuery 方法

@Override
@Transactional(rollbackFor = Exception.class)
public ChangeUserGlobalQueryResponse changeGlobalQuery(ChangeUserGlobalQueryRequest request) {
    String userName = request.getUserName();
    Boolean globalQuery = request.getGlobalQuery();
    if (StringUtils.isEmpty(userName) || globalQuery == null) {
        log.error("修改使用者全域性查詢標誌請求引數為空");
        throw new TitanException("所傳引數為空!");
    }
    if (request.getGlobalQuery()) {
        if (request.getPermanentFlag() == null) {
            log.error("修改使用者全域性查詢標誌請求引數->永久有效期標誌欄位為空");
            throw new TitanException("所傳引數為空!");
        } else if (!request.getPermanentFlag() && request.getEffectiveDate() == null) {
            log.error("修改使用者全域性查詢標誌請求引數->有效期欄位為空");
            throw new TitanException("所傳引數為空!");
        }
    }
    ChangeUserGlobalQueryResponse response = new ChangeUserGlobalQueryResponse();
    UserConfig user = queryByUserName(userName);
    if (user == null) {
        UserConfig userNew = new UserConfig();
        userNew.setUserName(userName);
        userNew.setCreateTime(new Date());
        userNew.setUpdateTime(new Date());
        userNew.setGlobalQuery(false);
        // 新增設定預設管理員許可權為 false
        userNew.setAdministratorFlag(false);
        // 新增結束
        userConfigMapper.insert(userNew);
    }
    Boolean isGlobalQuery = isGlobalQuery(new QueryUserGlobalQueryRequest(userName)).getGlobalQueryFlag();
    if (isGlobalQuery && !globalQuery) {
        UserConfig updateUser = new UserConfig();
        updateUser.setUserName(request.getUserName());
        updateUser.setGlobalQuery(false);
        updateUser.setUpdateTime(new Date());
        userConfigMapper.updateByPrimaryKeySelective(updateUser);
    } else if (!isGlobalQuery && globalQuery) {
        UserConfig updateUser = new UserConfig();
        updateUser.setUserName(request.getUserName());
        updateUser.setGlobalQuery(true);
        updateUser.setQueryEffectiveDate(request.getEffectiveDate());
        updateUser.setQueryPermanentFlag(request.getPermanentFlag());
        updateUser.setUpdateTime(new Date());
        userConfigMapper.updateByPrimaryKeySelective(updateUser);
    }
    RespUtils.setSuccess(response);
    return response;
}

方法分析

輸入引數

  • ChangeUserGlobalQueryRequest request:包含請求引數,主要包括 userName(使用者名稱)、globalQuery(全域性查詢標誌)、permanentFlag(永久有效期標誌)和 effectiveDate(有效期)。

輸出引數

  • ChangeUserGlobalQueryResponse response:包含操作結果的響應物件。

方法步驟

  1. 建立響應物件

    ChangeUserGlobalQueryResponse response = new ChangeUserGlobalQueryResponse();
    
  2. 引數校驗

    if (StringUtils.isEmpty(userName) || globalQuery == null) {
        log.error("修改使用者全域性查詢標誌請求引數為空");
        throw new TitanException("所傳引數為空!");
    }
    
    • 檢查 userName 是否為空字串。
    • 檢查 globalQuery 是否為 null,如果為空則丟擲異常。
  3. 檢查全域性查詢標誌

    if (request.getGlobalQuery()) {
        if (request.getPermanentFlag() == null) {
            log.error("修改使用者全域性查詢標誌請求引數->永久有效期標誌欄位為空");
            throw new TitanException("所傳引數為空!");
        } else if (!request.getPermanentFlag() && request.getEffectiveDate() == null) {
            log.error("修改使用者全域性查詢標誌請求引數->有效期欄位為空");
            throw new TitanException("所傳引數為空!");
        }
    }
    
    • 如果 globalQuerytrue,進一步檢查 permanentFlag 是否為 null
    • 如果 permanentFlagfalse,檢查 effectiveDate 是否為 null,如果為空則丟擲異常。
  4. 查詢使用者配置

    UserConfig user = queryByUserName(userName);
    
    • 呼叫 queryByUserName 方法查詢使用者配置資訊。
  5. 處理新使用者

    if (user == null) {
        UserConfig userNew = new UserConfig();
        userNew.setUserName(userName);
        userNew.setCreateTime(new Date());
        userNew.setUpdateTime(new Date());
        userNew.setGlobalQuery(false);
        // 新增設定預設管理員許可權為 false
        userNew.setAdministratorFlag(false);
        // 新增結束
        userConfigMapper.insert(userNew);
    }
    
    • 如果使用者不存在,建立一個新的 UserConfig 物件 userNew,設定使用者名稱、建立時間、更新時間和預設許可權(全域性查詢許可權為 false,管理員許可權為 false)。
    • 將新使用者資訊插入資料庫。
  6. 檢查當前全域性查詢狀態

    Boolean isGlobalQuery = isGlobalQuery(new QueryUserGlobalQueryRequest(userName)).getGlobalQueryFlag();
    
    • 呼叫 isGlobalQuery 方法檢查使用者當前的全域性查詢狀態。
  7. 更新使用者全域性查詢標誌

    • 關閉全域性查詢

      if (isGlobalQuery && !globalQuery) {
          UserConfig updateUser = new UserConfig();
          updateUser.setUserName(request.getUserName());
          updateUser.setGlobalQuery(false);
          updateUser.setUpdateTime(new Date());
          userConfigMapper.updateByPrimaryKeySelective(updateUser);
      }
      
      • 如果使用者當前有全域性查詢許可權且請求關閉全域性查詢,更新使用者的全域性查詢標誌為 false 並更新時間。
    • 開啟全域性查詢

      else if (!isGlobalQuery && globalQuery) {
          UserConfig updateUser = new UserConfig();
          updateUser.setUserName(request.getUserName());
          updateUser.setGlobalQuery(true);
          updateUser.setQueryEffectiveDate(request.getEffectiveDate());
          updateUser.setQueryPermanentFlag(request.getPermanentFlag());
          updateUser.setUpdateTime(new Date());
          userConfigMapper.updateByPrimaryKeySelective(updateUser);
      }
      
      • 如果使用者當前沒有全域性查詢許可權且請求開啟全域性查詢,更新使用者的全域性查詢標誌為 true,設定有效期和永久有效期標誌,並更新時間。
  8. 設定響應物件

    RespUtils.setSuccess(response);
    
    • 設定響應物件的操作成功標誌。
  9. 返回響應物件

    return response;
    

詳細分析

1. 引數校驗

  • 使用者名稱校驗:確保 userName 不為空字串。
  • 全域性查詢標誌校驗:確保 globalQuery 不為 null
  • 永久有效期標誌校驗:如果 globalQuerytrue,確保 permanentFlag 不為 null
  • 有效期校驗:如果 globalQuerytruepermanentFlagfalse,確保 effectiveDate 不為 null

2. 查詢使用者配置

  • 查詢使用者:呼叫 queryByUserName 方法查詢使用者配置資訊。

3. 處理新使用者

  • 建立新使用者:如果使用者不存在,建立一個新的 UserConfig 物件並設定預設屬性。
  • 插入資料庫:將新使用者資訊插入資料庫。

4. 檢查當前全域性查詢狀態

  • 查詢當前狀態:呼叫 isGlobalQuery 方法檢查使用者當前的全域性查詢狀態。

5. 更新使用者全域性查詢標誌

  • 關閉全域性查詢:如果使用者當前有全域性查詢許可權且請求關閉全域性查詢,更新使用者的全域性查詢標誌為 false 並更新時間。
  • 開啟全域性查詢:如果使用者當前沒有全域性查詢許可權且請求開啟全域性查詢,更新使用者的全域性查詢標誌為 true,設定有效期和永久有效期標誌,並更新時間。

6. 設定響應物件

  • 設定成功標誌:設定響應物件的操作成功標誌。

7. 返回響應物件

  • 返回結果:返回包含操作結果的響應物件。

總結

changeGlobalQuery 方法的主要功能是修改使用者的全域性查詢標誌。具體步驟包括:

  1. 引數校驗:確保請求引數不為空。
  2. 查詢使用者配置:查詢使用者配置資訊。
  3. 處理新使用者:如果使用者不存在,建立新使用者並插入資料庫。
  4. 檢查當前全域性查詢狀態:查詢使用者當前的全域性查詢狀態。
  5. 更新使用者全域性查詢標誌:根據請求引數更新使用者的全域性查詢標誌。
  6. 設定響應物件:設定響應物件的操作成功標誌。
  7. 返回響應物件:返回包含操作結果的響應物件。

透過這個方法,可以有效地管理使用者的全域性查詢許可權,確保使用者能夠正確地訪問所需的資料。

相關文章