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
:包含操作结果的响应对象。
方法步骤
-
创建响应对象:
ChangeUserGlobalQueryResponse response = new ChangeUserGlobalQueryResponse();
-
参数校验:
if (StringUtils.isEmpty(userName) || globalQuery == null) { log.error("修改用户全局查询标志请求参数为空"); throw new TitanException("所传参数为空!"); }
- 检查
userName
是否为空字符串。 - 检查
globalQuery
是否为null
,如果为空则抛出异常。
- 检查
-
检查全局查询标志:
if (request.getGlobalQuery()) { if (request.getPermanentFlag() == null) { log.error("修改用户全局查询标志请求参数->永久有效期标志字段为空"); throw new TitanException("所传参数为空!"); } else if (!request.getPermanentFlag() && request.getEffectiveDate() == null) { log.error("修改用户全局查询标志请求参数->有效期字段为空"); throw new TitanException("所传参数为空!"); } }
- 如果
globalQuery
为true
,进一步检查permanentFlag
是否为null
。 - 如果
permanentFlag
为false
,检查effectiveDate
是否为null
,如果为空则抛出异常。
- 如果
-
查询用户配置:
UserConfig user = queryByUserName(userName);
- 调用
queryByUserName
方法查询用户配置信息。
- 调用
-
处理新用户:
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
)。 - 将新用户信息插入数据库。
- 如果用户不存在,创建一个新的
-
检查当前全局查询状态:
Boolean isGlobalQuery = isGlobalQuery(new QueryUserGlobalQueryRequest(userName)).getGlobalQueryFlag();
- 调用
isGlobalQuery
方法检查用户当前的全局查询状态。
- 调用
-
更新用户全局查询标志:
-
关闭全局查询:
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
,设置有效期和永久有效期标志,并更新时间。
- 如果用户当前没有全局查询权限且请求开启全局查询,更新用户的全局查询标志为
-
-
设置响应对象:
RespUtils.setSuccess(response);
- 设置响应对象的操作成功标志。
-
返回响应对象:
return response;
详细分析
1. 参数校验
- 用户名校验:确保
userName
不为空字符串。 - 全局查询标志校验:确保
globalQuery
不为null
。 - 永久有效期标志校验:如果
globalQuery
为true
,确保permanentFlag
不为null
。 - 有效期校验:如果
globalQuery
为true
且permanentFlag
为false
,确保effectiveDate
不为null
。
2. 查询用户配置
- 查询用户:调用
queryByUserName
方法查询用户配置信息。
3. 处理新用户
- 创建新用户:如果用户不存在,创建一个新的
UserConfig
对象并设置默认属性。 - 插入数据库:将新用户信息插入数据库。
4. 检查当前全局查询状态
- 查询当前状态:调用
isGlobalQuery
方法检查用户当前的全局查询状态。
5. 更新用户全局查询标志
- 关闭全局查询:如果用户当前有全局查询权限且请求关闭全局查询,更新用户的全局查询标志为
false
并更新时间。 - 开启全局查询:如果用户当前没有全局查询权限且请求开启全局查询,更新用户的全局查询标志为
true
,设置有效期和永久有效期标志,并更新时间。
6. 设置响应对象
- 设置成功标志:设置响应对象的操作成功标志。
7. 返回响应对象
- 返回结果:返回包含操作结果的响应对象。
总结
changeGlobalQuery
方法的主要功能是修改用户的全局查询标志。具体步骤包括:
- 参数校验:确保请求参数不为空。
- 查询用户配置:查询用户配置信息。
- 处理新用户:如果用户不存在,创建新用户并插入数据库。
- 检查当前全局查询状态:查询用户当前的全局查询状态。
- 更新用户全局查询标志:根据请求参数更新用户的全局查询标志。
- 设置响应对象:设置响应对象的操作成功标志。
- 返回响应对象:返回包含操作结果的响应对象。
通过这个方法,可以有效地管理用户的全局查询权限,确保用户能够正确地访问所需的数据。