From d78323a9138aab73f9f1b25e0a74283780176452 Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 09 12월 2021 20:43:47 +0900
Subject: [PATCH] - 이슈전체보기/이슈프로젝트보기 권한 생성 - 워크스페이스 권한을 가진 사용자 OWL정보 오류 해결

---
 src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java |   59 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 41 insertions(+), 18 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
index 255db28..71ee77a 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ProjectServiceImpl.java
@@ -3,6 +3,7 @@
 import com.google.common.collect.Lists;
 import kr.wisestone.owl.common.ExcelConditionCheck;
 import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.constant.MngPermission;
 import kr.wisestone.owl.constant.MsgConstants;
 import kr.wisestone.owl.domain.*;
 import kr.wisestone.owl.domain.enumType.EmailType;
@@ -11,12 +12,14 @@
 import kr.wisestone.owl.mapper.ProjectMapper;
 import kr.wisestone.owl.repository.ProjectClosureRepository;
 import kr.wisestone.owl.repository.ProjectRepository;
+import kr.wisestone.owl.repository.UserDepartmentRepository;
 import kr.wisestone.owl.service.*;
 import kr.wisestone.owl.util.CommonUtil;
 import kr.wisestone.owl.util.ConvertUtil;
 import kr.wisestone.owl.util.DateUtil;
 import kr.wisestone.owl.vo.*;
 import kr.wisestone.owl.web.condition.ProjectCondition;
+import kr.wisestone.owl.web.condition.WidgetCondition;
 import kr.wisestone.owl.web.form.ProjectForm;
 import kr.wisestone.owl.web.view.ExcelView;
 import org.apache.commons.lang3.StringUtils;
@@ -48,7 +51,7 @@
     private DepartmentService departmentService;
 
     @Autowired
-    private UserDepartmentService userDepartmentService;
+    private UserDepartmentRepository userDepartmentRepository;
 
     @Autowired
     private ProjectRoleService projectRoleService;
@@ -328,6 +331,19 @@
         }
     }
 
+    void SetMyDepartmentId(ProjectCondition projectCondition){
+        Long loginId = projectCondition.getLoginUserId();
+        List<Long> myDepartmentIds = Lists.newArrayList();
+        List<UserDepartment> myDepartments = this.userDepartmentRepository.findByUserId(loginId);
+
+        if(myDepartments != null && myDepartments.size() > 0){
+            for(UserDepartment myDepartment : myDepartments){
+                myDepartmentIds.add(myDepartment.getDepartmentId());
+            }
+        }
+        projectCondition.setMyDepartmentIds(myDepartmentIds);
+    }
+
     //  �봽濡쒖젥�듃 紐⑸줉�쓣 議고쉶�븳�떎.
     @Override
     @Transactional(readOnly = true)
@@ -342,14 +358,17 @@
         List<Map<String, Object>> results;
         Long totalCount;
 
+        User user = this.webAppUtil.getLoginUserObject();
+
         if (condition.getWorkspaceManager()) {
             //  �뾽臾닿났媛� 愿�由ъ옄�씪 寃쎌슦 紐⑤뱺 �봽濡쒖젥�듃媛� �몴�떆�릺�뼱�빞 �븳�떎.
             //  愿�由ъ옄�씪 �븣
-            if (this.userWorkspaceService.checkWorkspaceManager()) {
+            if (this.userWorkspaceService.checkWorkspaceManager(user) || user.getPermission() >= MngPermission.USER_PERMISSION_MNG_PROJECT_ALL) {
                 results = this.projectMapper.findByWorkspaceManager(condition);
                 totalCount = this.projectMapper.countByWorkspaceManager(condition);
             }
             else {
+                this.SetMyDepartmentId(condition);
                 results = this.projectMapper.find(condition);
                 totalCount = this.projectMapper.count(condition);
             }
@@ -361,8 +380,8 @@
 
         int totalPage = (int) Math.ceil((totalCount - 1) / pageable.getPageSize()) + 1;
         //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
-        List<ProjectVo> projectVos = this.makeProjectVos(results);
-        this.setChildrenProject(projectVos);
+        List<ProjectVo> projectVos = this.makeProjectVos(results, user);
+        this.setChildrenProject(projectVos, user);
 
         resJsonData.put(Constants.RES_KEY_CONTENTS, projectVos);
         resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(),
@@ -371,16 +390,16 @@
         return projectVos;
     }
 
-    void setChildrenProject(List<ProjectVo> projectVos) {
+    void setChildrenProject(List<ProjectVo> projectVos, User user) {
         int projectCount = projectVos.size();
         for (int i=0; i< projectCount; i++) {
             ProjectVo projectVo = projectVos.get(i);
             List<Map<String, Object>> children = this.projectMapper.findChildrenProject(projectVo.getId());
 
             if (children != null && children.size() > 0) {
-                List<ProjectVo> childrenVo = this.makeProjectVos(children);
+                List<ProjectVo> childrenVo = this.makeProjectVos(children, user);
                 projectVo.setChildProjects(childrenVo);
-                setChildrenProject(childrenVo);
+                setChildrenProject(childrenVo, user);
             }
         }
     }
@@ -400,7 +419,7 @@
 
 
     //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
-    private List<ProjectVo> makeProjectVos(List<Map<String, Object>> results) {
+    private List<ProjectVo> makeProjectVos(List<Map<String, Object>> results, User user) {
         List<ProjectVo> projectVos = Lists.newArrayList();
 
         for (Map<String, Object> result : results) {
@@ -413,7 +432,7 @@
             this.setProjectDepartment(projectVo);
 
             //  �뾽臾닿났媛� �떞�떦�옄�뒗 紐⑤뱺 �봽濡쒖젥�듃瑜� �닔�젙/�궘�젣�븷 �닔 �엳�뼱�빞 �븳�떎.
-            if (this.userWorkspaceService.checkWorkspaceManager()) {
+            if (this.userWorkspaceService.checkWorkspaceManager(user)) {
                 projectVo.setModifyPermissionCheck(true);
             }
             projectVos.add(projectVo);
@@ -532,10 +551,12 @@
         //  �봽濡쒖젥�듃 李몄뿬 遺��꽌
         List<Long> existDepartmentIds = this.getIncludeProjectDepartment(project);
 
+        User user = this.webAppUtil.getLoginUserObject();
+
         //  �썙�겕�뒪�럹�씠�뒪�뿉�꽌 湲곕낯�쑝濡� �젣怨듬릺�뒗 �봽濡쒖젥�듃�뿉 ���븳 泥댄겕
         this.checkDefaultProject(project, projectForm);
         //  �닔�젙 沅뚰븳 泥댄겕
-        this.checkModifyPermission(project.getId());
+        this.checkModifyPermission(project.getId(), user);
         //  愿�由ъ옄 蹂�寃�
         Map<String, Object> changeProjectManagerNotifications = this.modifyProjectManagers(project, projectForm, ProjectRole.TYPE_MANAGER);
         //  �씪諛� �궗�슜�옄 蹂�寃�
@@ -659,11 +680,11 @@
     }
 
     //  濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
-    private void checkModifyPermission(Long projectId) {
+    private void checkModifyPermission(Long projectId, User user) {
         Boolean hasPermission = Boolean.FALSE;
 
         //  �빐�떦 �뾽臾� 怨듦컙�쓽 愿�由ъ옄�씪 寃쎌슦 沅뚰븳 泥댄겕瑜� �븯吏� �븡�뒗�떎.
-        if (this.userWorkspaceService.checkWorkspaceManager()) {
+        if (this.userWorkspaceService.checkWorkspaceManager(user)) {
             return;
         }
 
@@ -1000,7 +1021,7 @@
         }
 
         //  濡쒓렇�씤�븳 �궗�슜�옄媛� 愿�由ъ옄 �뿭�븷�뿉 �냼�냽�릺�뼱 �엳�뒗吏� �솗�씤�븳�떎.
-        this.checkModifyPermission(project.getId());
+        this.checkModifyPermission(project.getId(), this.webAppUtil.getLoginUserObject());
 
         List<String> sendEmails = Lists.newArrayList();
         Map<String, Object> params = new HashMap<>();
@@ -1094,21 +1115,23 @@
     @Override
     @Transactional(readOnly = true)
     public List<ProjectVo> findByIncludeProject(List<String> statuses, String projectType) {
+        User user = this.webAppUtil.getLoginUserObject();
+
         ProjectCondition projectCondition = new ProjectCondition();
-        projectCondition.setLoginUserId(this.webAppUtil.getLoginId());
-        projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
+        projectCondition.setLoginUserId(user.getId());
+        projectCondition.setWorkspaceId(user.getLastWorkspaceId());
         projectCondition.setProjectType(projectType);
         projectCondition.setStatuses(statuses);
 
         List<Map<String, Object>> results;
 
-        if (this.userWorkspaceService.checkWorkspaceManager()) {
+        if (this.userWorkspaceService.checkWorkspaceManager(user)) {
             results = this.projectMapper.findByWorkspaceManager(projectCondition);
         } else {
             results = this.projectMapper.findByWorkspaceIdAndIncludeProject(projectCondition);
         }
         List<ProjectVo> projectVos = this.makeProjectByVos(results);
-        this.setChildrenProject(projectVos);
+        this.setChildrenProject(projectVos, user);
 
         return  projectVos;
     }
@@ -1135,7 +1158,7 @@
         projectCondition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
         List<Map<String, Object>> results = this.projectMapper.find(projectCondition);
         //  �봽濡쒖젥�듃 議고쉶 寃곌낵瑜� ProjectVos 濡� 蹂��솚�븳�떎. - 愿�由ъ옄, �씪諛� �궗�슜�옄 �젙蹂� 異붽�
-        List<ProjectVo> projectVos = this.makeProjectVos(results);
+        List<ProjectVo> projectVos = this.makeProjectVos(results, this.webAppUtil.getLoginUserObject());
         ExportExcelVo excelInfo = new ExportExcelVo();
         excelInfo.setFileName(this.messageAccessor.message("common.projectList")); // �봽濡쒖젥�듃 紐⑸줉
         excelInfo.addAttrInfos(new ExportExcelAttrVo("statusName", this.messageAccessor.message("common.status"), 6, ExportExcelAttrVo.ALIGN_CENTER)); // �긽�깭

--
Gitblit v1.8.0