Я использую метод ниже, чтобы проверить, есть ли у пользователя доступ или не передавать атрибут пользователя. - PullRequest
0 голосов
/ 13 июля 2020
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

ИСКЛЮЧЕНИЕ: Cyclomati c Сложность этого метода «getUserAttributes» составляет 13, что больше, чем разрешено 10.

Как решить эту исключительную ситуацию?

1 Ответ

0 голосов
/ 13 июля 2020

Извлечь дублированный код в функцию. Например:

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");
    }
}
...