UserService 修改用户查询权限 changeGlobalQuery分析

好的,根据您提供的 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. 返回响应对象:返回包含操作结果的响应对象。

通过这个方法,可以有效地管理用户的全局查询权限,确保用户能够正确地访问所需的数据。

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