java - 我正在使用以下方法来检查用户是否有权访问或不传递用户属性
问题描述
private Map<String, String> getUserAttributes(User user)
{
Map<String, String> map = new HashMap<>();
map.put("facility", StringUtils.join(user.getLocationsCodes(), ","));
map.put("division", StringUtils.join(user.getDivisionsCodes(), ","));
if(AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORT_BUILDER)
&& AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORTING1))
{
map.put("can_access_report1", "true");
}
if(AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORT_BUILDER)
&& AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORTING2))
{
map.put("can_access_report2", "true");
}
if(AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORT_BUILDER)
&& AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORTING3))
{
map.put("can_access_report3", "true");
}
if(AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORT_BUILDER)
&& AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORTING4))
{
map.put("can_access_report4", "true");
}
if(AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORT_BUILDER)
&& AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORTING5))
{
map.put("can_access_report5", "true");
}
if(AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORT_BUILDER)
&& AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORTING6))
{
map.put("can_access_report6", "true");
}
return map;
}
但是在使用 SonarQube 验证此代码时遇到异常
例外:此方法“getUserAttributes”的圈复杂度为 13,大于授权的 10。
我该如何解决这个异常?
解决方案
将重复的代码提取到函数中。例如:
private Map<String, String> getUserAttributes(User user)
{
Map<String, String> map = new HashMap<>();
map.put("facility", StringUtils.join(user.getLocationsCodes(), ","));
map.put("division", StringUtils.join(user.getDivisionsCodes(), ","));
checkAccess(ACCESS_REPORTING1, "can_access_report1", map);
checkAccess(ACCESS_REPORTING2, "can_access_report2", map);
checkAccess(ACCESS_REPORTING3, "can_access_report3", map);
checkAccess(ACCESS_REPORTING4, "can_access_report4", map);
checkAccess(ACCESS_REPORTING5, "can_access_report5", map);
checkAccess(ACCESS_REPORTING6, "can_access_report6", map);
return map;
}
private checkAccess(PermissionConstants permission, String key, Map<String, String> map) {
if(AuthHelper.getInstance().hasPermission(PermissionConstants.ACCESS_REPORT_BUILDER)
&& AuthHelper.getInstance().hasPermission(permission))
{
map.put(key, "true");
}
}
推荐阅读
- node.js - Node - 使用 NODE_MODULE_VERSION 72 针对不同的 Node.js 版本进行编译
- ios - 如何在 Swift 中添加搜索栏?
- python - Twitter bot 未将推文 ID 保存在文本文件中
- math - 6道选择题中3道选择题不正确的概率是多少?
- ruby - Ruby - 将嵌套哈希转换为 CSV
- java - Java 记录 (JEP359) 作为 Spring 控制器请求和响应 DTO
- java - Micronaut 如何仅使用 @Inject 注解进行注入?
- node.js - Nodejs Websockets 在本地工作,但不在服务器上
- swagger-codegen - 如何在 Swagger Codegen Spring 服务器存根中没有 responseWrapper
- here-api - Maps API:如何淡化基础层?