我正在使用以下方法检查用户是否有权访问或不传递用户属性
I'm using below method for check the user have access or not to pass a user attribute
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");
}
}
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");
}
}