OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-14 a72bda0256b8a5f3bc348142449e759cd445560b
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -175,6 +175,9 @@
    private SimpMessagingTemplate simpMessagingTemplate;
    @Autowired
    private UserDepartmentService userDepartmentService;
    @Autowired
    private UserDepartmentRepository userDepartmentRepository;
    @Autowired
@@ -802,6 +805,7 @@
        this.setMapToIssueVo(results, issueVos, issueCondition, user);
        if (issueCondition.getTree()) {
            this.setParentIssue(issueVos);
            this.setDownIssues(user, issueVos);
            this.setRelationIssues(issueVos);
        }
@@ -831,9 +835,9 @@
                IssueVo addIssueVo = ConvertUtil.copyProperties(downIssue, IssueVo.class);
                addIssueVo.setIssueTypeId(downIssue.getIssueType().getId());
                downIssueVos.add(addIssueVo);
            }
            issueVo.setIssueDownVos(downIssueVos);
            if (downIssueVos.size() > 0) {
                this.setDownIssues(user, downIssueVos);
            }
@@ -843,11 +847,10 @@
            this.setIssueDepartmentList(issueVos, issueCondition, user);
            //  등록자 정보 추가
            this.setRegister(issueVos);  //  담당자 정보 셋팅
            //  사용자 정의 필드 정보 추가
            this.setIssueCustomFieldValue(issueVos, issueCondition);
            this.SetWorkflowDepartment(issueVos); //워크플로우에 설정한 담당부서 가져오기
            //워크플로우에 설정한 담당부서 가져오기
            this.SetWorkflowDepartment(issueVos);
        }
    }
@@ -857,6 +860,20 @@
            List<IssueVo> relationIssues = this.issueRelationService.findRelationIssue(issueVo.getId());
            for(IssueVo relationIssue : relationIssues){
                issueVo.addRelationIssueVo(ConvertUtil.copyProperties(relationIssue, IssueVo.class));
            }
        }
    }
    // 상위 이슈 체크
    private void setParentIssue(List<IssueVo> issueVos) {
        for(IssueVo issueVo : issueVos) {
            if(issueVo.getParentIssueId() != null) {
                Issue parentIssue = this.getIssue(issueVo.getParentIssueId());
                //issueVo.setParentIssueVo(ConvertUtil.copyProperties(parentIssue, IssueVo.class));
                if(parentIssue.getIssueCustomFieldValues() == null || parentIssue.getIssueCustomFieldValues().size() == 0){
                    issueVo.setIssueCustomFieldValueVos(null);
                }
                ConvertUtil.copyProperties(parentIssue, issueVo);
            }
        }
    }
@@ -1224,7 +1241,7 @@
            }
            //  이슈 수정 권한을 갖고 있는지 확인
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, null)) {
                issueVo.setModifyPermissionCheck(Boolean.TRUE);
            }
        }
@@ -1261,7 +1278,7 @@
            }
            //  이슈 수정 권한을 갖고 있는지 확인
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) {
                issueVo.setModifyPermissionCheck(Boolean.TRUE);
            }
        }
@@ -1501,6 +1518,15 @@
            DepartmentVo departmentVo = ConvertUtil.copyProperties(issueDepartment.getDepartment(), DepartmentVo.class);
            departmentVo.setByName(departmentVo.getDepartmentName());
            departmentVos.add(departmentVo);
            List<UserDepartment> userDepartments = this.userDepartmentRepository.findByDepartmentId(departmentVo.getId());
            if (userDepartments != null && userDepartments.size() > 0) {
                for (UserDepartment userDepartment : userDepartments) {
                    if (userDepartment.getUserId().equals(this.webAppUtil.getLoginId())){
                        issueVo.setModifyPermissionCheck(Boolean.TRUE);
                    }
                }
            }
        }
        issueVo.setDepartmentVos(departmentVos);
    }
@@ -1907,7 +1933,7 @@
    //  이슈 수정 권한 체크
    private void verifyIssueModifyPermission(Issue issue, User user) {
        //  이슈 수정 권한을 갖고 있는지 확인
        if (!this.checkHasPermission(ConvertUtil.copyProperties(issue, IssueVo.class), this.getIssueUserVos(issue), user)) {
        if (!this.checkHasPermission(ConvertUtil.copyProperties(issue, IssueVo.class), this.getIssueUserVos(issue), user, this.getIssueDepartmentVos(issue))) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.ISSUE_NOT_MODIFY_PERMISSION));
        }
@@ -1932,8 +1958,27 @@
        return userVos;
    }
    //  이슈에서 담당자 정보를 추출한다.
    private List<DepartmentVo> getIssueDepartmentVos(Issue issue) {
        List<DepartmentVo> departmentVos = Lists.newArrayList();
        Set<IssueDepartment> issueDepartments = issue.getIssueDepartments();
        try {
            for (IssueDepartment issueDepartment : issueDepartments) {
                Department department = issueDepartment.getDepartment();
                DepartmentVo departmentVo = ConvertUtil.copyProperties(department, DepartmentVo.class);
                departmentVos.add(departmentVo);
            }
        } catch (Exception ex) {
        }
        return departmentVos;
    }
    //  이슈 수정 권한을 갖고 있는지 확인
    private boolean checkHasPermission(IssueVo issueVo, List<UserVo> issueUserVos, User user) {
    private boolean checkHasPermission(IssueVo issueVo, List<UserVo> issueUserVos, User user, List<DepartmentVo> departmentVos) {
        boolean hasPermission = false;
        //  업무 공간 관리자일 경우 수정 권한을 갖는다.
@@ -1942,8 +1987,10 @@
        hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.PROJECT_MANAGER, issueVo, null, null, user);
        //   이슈 등록자일 경우 수정 권한을 갖는다.
        hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.REGISTER, issueVo, null, null, user);
        //  이슈 담당자일 경우 수정 권한을 갖는다. => 담당부서로 수정 - 체크
        //  이슈 담당자일 경우 수정 권한을 갖는다.
        //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ASSIGNEE, issueVo, issueUserVos);
        //  이슈 담당부서일 경우 수정 권한을 갖는다.
        hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.DEPARTMENT, issueVo, null, departmentVos, user);
        //  담당자가 없으면 모든 사용자가 수정 권한을 갖는다.
        //hasPermission = this.checkIssueModifyPermission(hasPermission, Issue.ALL_ISSUE_MANAGER, issueVo, null, null, user);
@@ -1953,7 +2000,7 @@
    }
    //  이슈 수정 권한을 확인한다.
    private boolean checkIssueModifyPermission(Boolean hasPermission, String checkType, IssueVo issueVo, List<UserVo> issueUserVos, List<DepartmentVo> issueDepartmentVos, User user) {
    private boolean checkIssueModifyPermission(Boolean hasPermission, String checkType, IssueVo issueVo, List<UserVo> issueUserVos, List<DepartmentVo> departmentVos, User user) {
        if (!hasPermission) {
            switch (checkType) {
                case Issue.WORKSPACE_MANAGER:  //  업무 공간 관리자
@@ -1988,17 +2035,22 @@
                case Issue.DEPARTMENT:
                    //  담당부서가 없으면 모든 사용자가 수정 권한을 갖는다.
                    if (issueDepartmentVos.size() < 1) {
                    /*if (userDepartmentVos.size() < 1) {
                        hasPermission = true;
                        break;
                    }
                    //   이슈 담당부서 여부 확인
                    /*for (DepartmentVo issueDepartmentVo : issueDepartmentVos) {
                        if (issueDepartmentVo.getId().equals()) {
                            hasPermission = true;
                            break;
                        }
                    }*/
                    //   이슈 담당부서 여부 확인
                    for (DepartmentVo departmentVo : departmentVos) {
                        List<UserDepartment> userDepartments = this.userDepartmentService.findByDepartmentId(departmentVo.getId());
                        if(userDepartments != null && userDepartments.size() > 0) {
                            for (UserDepartment userDepartment : userDepartments) {
                                if (userDepartment.getUserId().equals(user.getId())){
                                    hasPermission = true;
                                    break;
                                }
                            }
                        }
                    }
                    break;
            }
        }