From a72bda0256b8a5f3bc348142449e759cd445560b Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 화, 14 12월 2021 17:53:56 +0900
Subject: [PATCH] 이슈 수정시 사용자가 담당부서에 속해있으면 수정 가능

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java           |   66 ++++++++++++++++++++++++++-------
 src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java    |    2 +
 src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java          |    3 +
 src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java |    8 ++++
 4 files changed, 65 insertions(+), 14 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java b/src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java
index da29e2c..9cf7cb4 100644
--- a/src/main/java/kr/wisestone/owl/repository/IssueDepartmentRepository.java
+++ b/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);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java b/src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java
index be18795..2425fe2 100644
--- a/src/main/java/kr/wisestone/owl/service/IssueDepartmentService.java
+++ b/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);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java
index 1390d02..34d1557 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueDepartmentServiceImpl.java
+++ b/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) {
diff --git a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
index 8fa627b..324bb9e 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/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;
             }
         }

--
Gitblit v1.8.0