OWL ITS + 탐지시스템(인터넷 진흥원)
이민희
2021-12-14 a72bda0256b8a5f3bc348142449e759cd445560b
이슈 수정시 사용자가 담당부서에 속해있으면 수정 가능
4개 파일 변경됨
79 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java 66 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java
@@ -3,9 +3,11 @@
import kr.wisestone.owl.domain.IssueDepartment;
import kr.wisestone.owl.domain.IssueUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import java.util.List;
public interface IssueDepartmentRepository extends JpaRepository<IssueDepartment, Long> {
    List<IssueDepartment> findByIssueId(Long issueId);
    List<IssueDepartment> findByDepartmentId(@Param("departmentId") Long departmentId);
}
src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java
@@ -4,6 +4,7 @@
import kr.wisestone.owl.domain.IssueDepartment;
import kr.wisestone.owl.domain.User;
import kr.wisestone.owl.domain.Workspace;
import kr.wisestone.owl.vo.DepartmentVo;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
@@ -21,4 +22,6 @@
    void removeIssueDepartment(Long projectId, List<Long> excludeUserIds);
    List<IssueDepartment> find(Issue issue);
    List<IssueDepartment> findByDepartmentId(Long departmentId);
}
src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java
@@ -8,6 +8,7 @@
import kr.wisestone.owl.service.IssueDepartmentService;
import kr.wisestone.owl.util.CommonUtil;
import kr.wisestone.owl.util.MapUtil;
import kr.wisestone.owl.vo.DepartmentVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -91,6 +92,13 @@
        return this.issueDepartmentRepository.findByIssueId(issue.getId());
    }
    //  이슈 담당부서 찾기
    @Override
    @Transactional
    public List<IssueDepartment> findByDepartmentId(Long departmentId) {
        return this.issueDepartmentRepository.findByDepartmentId(departmentId);
    }
    @Override
    @Transactional
    public void insertIssueDepartment(List<Map<String, Long>> issueAssigneeMaps) {
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
@@ -1238,7 +1241,7 @@
            }
            //  이슈 수정 권한을 갖고 있는지 확인
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, null)) {
                issueVo.setModifyPermissionCheck(Boolean.TRUE);
            }
        }
@@ -1275,7 +1278,7 @@
            }
            //  이슈 수정 권한을 갖고 있는지 확인
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user)) {
            if (this.checkHasPermission(issueVo, issueVo.getUserVos(), user, issueVo.getDepartmentVos())) {
                issueVo.setModifyPermissionCheck(Boolean.TRUE);
            }
        }
@@ -1515,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);
    }
@@ -1921,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));
        }
@@ -1946,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;
        //  업무 공간 관리자일 경우 수정 권한을 갖는다.
@@ -1956,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);
@@ -1967,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:  //  업무 공간 관리자
@@ -2002,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;
            }
        }