From 1bf54ac4463cc9a821bb818f6c8cfb01d981e91a Mon Sep 17 00:00:00 2001
From: 이민희 <mhlee@maprex.co.kr>
Date: 목, 23 12월 2021 15:51:29 +0900
Subject: [PATCH] - '이슈관리' 권한은 내가 속해있는 프로젝트의 이슈에 대해서만 관리 권한이 있음 - 일반 사용자 검색 문제 해결 - 이슈리스트 툴팁 재추가

---
 src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java  |   37 +++++++----
 src/main/resources/mybatis/query-template/project-template.xml     |   53 ++++++++++++++++-
 src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java |   28 ++++++++-
 src/main/java/kr/wisestone/owl/constant/MngPermission.java         |    8 +-
 src/main/webapp/scripts/app/issue/issueList.controller.js          |    1 
 src/main/resources/mybatis/query-template/widget-template.xml      |   10 +++
 6 files changed, 112 insertions(+), 25 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MngPermission.java b/src/main/java/kr/wisestone/owl/constant/MngPermission.java
index 405737d..ac79644 100644
--- a/src/main/java/kr/wisestone/owl/constant/MngPermission.java
+++ b/src/main/java/kr/wisestone/owl/constant/MngPermission.java
@@ -39,15 +39,15 @@
 
     public static int makeAllPermission()
     {
-        return (USER_PERMISSION_MNG_ISSUE |
-                USER_PERMISSION_MNG_PARTNER |
-                USER_PERMISSION_MNG_WORKSPACE |
+        return (
                 USER_PERMISSION_MNG_PROJECT |
+                USER_PERMISSION_MNG_ISSUE |
+                USER_PERMISSION_MNG_WORKSPACE |
+                USER_PERMISSION_MNG_PARTNER |
                 USER_PERMISSION_MNG_API |
                 USER_PERMISSION_MNG_NOTICE |
                 USER_PERMISSION_MNG_FAQ |
                 USER_PERMISSION_MNG_QNA |
-                USER_PERMISSION_MNG_EVENT |
                 USER_PERMISSION_MNG_GUIDE |
                 USER_PERMISSION_MNG_ISSUE_SETTING);
     }
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 b25b775..5521106 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/IssueServiceImpl.java
@@ -892,7 +892,6 @@
     @Override
     @Transactional(readOnly = true)
     public List<IssueVo> findIssue(Map<String, Object> resJsonData, IssueCondition issueCondition, Pageable pageable) {
-
         //  寃��깋 議곌굔�쓣 留뚮뱺�떎
         if (!this.makeIssueSearchCondition(issueCondition, Lists.newArrayList("01", "02", "03"), pageable)) {
             //  �씠�뒋 紐⑸줉�쓣 李얠� 紐삵븷 寃쎌슦 湲곕낯 �젙蹂대줈 由ы꽩�븳�떎.
@@ -926,15 +925,14 @@
         Long totalCount = 0L;
         UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
 
-        if (this.userWorkspaceService.checkWorkspaceManager(user)
-                || (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT) &&
-                MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE))) {
-            this.SetAllDepartmentId(issueCondition);
-        } else{
-            this.SetMyDepartmentId(issueCondition);
-            /*results = this.issueMapper.findByDepartment(issueCondition);
-            totalCount = this.issueMapper.countByDepartment(issueCondition);*/
-        }
+//        if (!this.userWorkspaceService.checkWorkspaceManager(user)
+//                && !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) { //理쒓퀬愿�由ъ옄 & �봽濡쒖젥�듃,�씠�뒋 愿�由ъ옄 �씪 寃쎌슦 紐⑤뱺 �씠�뒋 蹂닿린
+//            this.SetMyDepartmentId(issueCondition);
+            //this.SetAllDepartmentId(issueCondition);
+//        } /*else{
+//            results = this.issueMapper.findByDepartment(issueCondition);
+//            totalCount = this.issueMapper.countByDepartment(issueCondition);
+//        }*/
         results = this.issueMapper.find(issueCondition);
         totalCount = this.issueMapper.count(issueCondition);
 
@@ -1241,16 +1239,27 @@
         condition.setLoginUserId(this.webAppUtil.getLoginId());
         condition.setWorkspaceId(this.userService.getUser(this.webAppUtil.getLoginId()).getLastWorkspaceId());
 
+        User user = this.webAppUtil.getLoginUserObject();
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
+
         //  �봽濡쒖젥�듃 �궎媛� 議댁옱�븷 寃쎌슦 �봽濡쒖젥�듃 �궎�뿉 �빐�떦�븯�뒗 �봽濡쒖젥�듃瑜� 議고쉶�븯怨� 寃��깋 議곌굔�뿉 �뀑�똿�븳�떎.
         if (!this.getProjectByProjectKey(condition.getProjectKey(), condition)) {
             return false;
         }
 
         //  �봽濡쒖젥�듃瑜� �꽑�깮�븯吏� �븡�븯�쑝硫� �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 �봽濡쒖젥�듃瑜� 李얜뒗�떎.
-        /*if (condition.getProjectIds().size() < 1) {
-            List<Map<String, Object>> projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType());
-            List<Long> projectIds = Lists.newArrayList();
+        if (condition.getProjectIds().size() < 1) {
+            List<Map<String, Object>> projects = Lists.newArrayList();
+            if (this.userWorkspaceService.checkWorkspaceManager(user) || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)){
+                return true;
+            }/*else if (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)){
+                projects = this.projectService.findByWorkspaceIdAndIncludeProjectAll(projectStatues, condition.getProjectType());
+            }*/
+            else {
+                projects = this.projectService.findByWorkspaceIdAndIncludeProject(projectStatues, condition.getProjectType());
+            }
 
+            List<Long> projectIds = Lists.newArrayList();
             for (Map<String, Object> result : projects) {
                 Long projectId = MapUtil.getLong(result, "id");
 
@@ -1264,7 +1273,7 @@
             if (projectIds.size() < 1) {
                 return false;
             }
-        }*/
+        }
 
         return true;
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
index 3a61b01..a17c3b5 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/WidgetServiceImpl.java
@@ -54,6 +54,9 @@
     private ProjectService projectService;
 
     @Autowired
+    private ProjectRoleDepartmentService projectRoleDepartmentService;
+
+    @Autowired
     private ProjectClosureService projectClosureService;
 
     @Autowired
@@ -214,8 +217,20 @@
 
     void SetMeAndDownProjectIds(List<Long> parentProjectIds, WidgetCondition widgetCondition) {
         List<Long> downProjectIds = Lists.newArrayList();
+        List<Long> projectIds = Lists.newArrayList();
+        projectIds.add(-1L);
+        User user = this.webAppUtil.getLoginUserObject();
+        UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
         if(parentProjectIds != null && parentProjectIds.size() > 0){
             for(Long parentProjectId : parentProjectIds){
+                if(!this.userWorkspaceService.checkWorkspaceManager(user) || !MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)){
+                    Project project = this.projectService.getProject(parentProjectId);
+                    List<Map<String, Object>> results = this.projectService.findByWorkspaceIdAndIncludeProject(Lists.newArrayList("01", "02", "03"), project.getProjectType().toString());
+                    if(results == null || results.size() < 1) {
+                        widgetCondition.setMeAndDownProjectIds(projectIds);
+                        break;
+                    }
+                }
                 List<ProjectClosure> projectClosures = this.projectClosureRepository.findByParentProjectId(parentProjectId); //�궡 �봽濡쒖젥�듃ID媛� �긽�쐞�봽濡쒖젥�듃�씤寃� �엳�뒗吏�
                 if(projectClosures != null && projectClosures.size() > 0){
                     for(ProjectClosure projectClosure : projectClosures){
@@ -257,8 +272,7 @@
         if (widgetCondition.getProjectIds().size() > 0) {
             SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
             if (this.userWorkspaceService.checkWorkspaceManager(user)
-                    || (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT) &&
-                    MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE))) {
+                    || (MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE))) {
                 remainIssue = this.widgetMapper.countRemainIssue(widgetCondition);   //  �옍�뿬 �씠�뒋
                 delayIssue = this.widgetMapper.countTodayDelayIssue(widgetCondition); //  吏��뿰�맂 �씠�뒋
                 assigneeIssue = this.widgetMapper.countAssigneeIssue(widgetCondition);   //  �븷�떦�맂 �씠�뒋
@@ -514,7 +528,7 @@
             SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
             List<Map<String, Object>> projectMemberIssues = Lists.newArrayList();
             if (this.userWorkspaceService.checkWorkspaceManager(user)
-                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_PROJECT)) {
+                    || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) {
                 projectMemberIssues = this.widgetMapper.findProjectMemberIssue(widgetCondition);
             } else {
                 projectMemberIssues = this.widgetMapper.findProjectMemberIssueByDepartment(widgetCondition);
@@ -834,6 +848,13 @@
         UserLevel userLevel = this.userLevelService.getUserLevel(user.getUserLevel().getId());
         if (widgetCondition.getProjectId() != null) {
             SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
+            if (widgetCondition.getMeAndDownProjectIds() != null) {
+                for (Long meAndProjectId : widgetCondition.getMeAndDownProjectIds()) {
+                    if(meAndProjectId == -1L) {
+                        results.replace("projectVos", null);
+                    }
+                }
+            }
             List<Map<String, Object>> issueTypeIssues = Lists.newArrayList();
             if (this.userWorkspaceService.checkWorkspaceManager(user)
                     || MngPermission.checkMngPermission(userLevel.getPermission(), MngPermission.USER_PERMISSION_MNG_ISSUE)) {
@@ -853,6 +874,7 @@
     //  �쐞�젽 寃��깋 議곌굔�쓣 留뚮뱾怨� �쟾泥� �봽濡쒖젥�듃 �젙蹂대�� 由ы꽩�븳�떎.
     private Map<String, Object> makeWidgetConditionAllProject(WidgetCondition widgetCondition, boolean getWidgetCondition) {
         Map<String, Object> results = new HashMap<>();
+        SetMeAndDownProjectIds(widgetCondition.getProjectIds(), widgetCondition);
 
         //  �쐞�젽 寃��깋 議곌굔�쓣 �뼸�뼱�빞 �븷 �긽�솴�씪 �븣 - �솕硫댁뿉�꽌 �꺆�쓣 �닃�윭 �뜲�씠�꽣瑜� �옱�슂泥��뻽�쓣 �븣
         if (getWidgetCondition) {
diff --git a/src/main/resources/mybatis/query-template/project-template.xml b/src/main/resources/mybatis/query-template/project-template.xml
index 1ec4ee1..af293cd 100644
--- a/src/main/resources/mybatis/query-template/project-template.xml
+++ b/src/main/resources/mybatis/query-template/project-template.xml
@@ -378,9 +378,7 @@
         </choose>
     </select>
 
-
-    <!--    �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 吏꾪뻾以묒씤 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎  -->
-    <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
+   <!-- <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
             parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
         SELECT
         DISTINCT p.id as id,
@@ -416,6 +414,55 @@
                 </foreach>
             </when>
         </choose>
+    </select>-->
+
+    <!--    �빐�떦 �뾽臾� 怨듦컙�뿉�꽌 李몄뿬�븯怨� �엳�뒗 吏꾪뻾以묒씤 �봽濡쒖젥�듃瑜� 議고쉶�븳�떎  -->
+    <select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
+            parameterType="kr.wisestone.owl.web.condition.ProjectCondition">
+        SELECT
+        DISTINCT p.id as id,
+        p.name as name,
+        p.description as description,
+        p.status as status,
+        p.start_date as startDate,
+        p.end_date as endDate,
+        p.project_key as projectKey,
+        CASE p.default_yn WHEN 'Y' THEN 'true' ELSE 'false' END as defaultYn
+        FROM
+        project p
+        INNER JOIN project_role pr on p.id = pr.project_id
+        LEFT OUTER JOIN project_role_user pru on pru.project_role_id = pr.id
+        LEFT OUTER JOIN project_role_department prd ON prd.project_role_id = pr.id
+        LEFT OUTER JOIN department d on d.id = prd.department_id
+        WHERE p.workspace_id = #{workspaceId}
+        AND pru.user_id = #{loginUserId}
+        <choose>
+            <when test="myDepartmentIds != null and myDepartmentIds.size != 0">
+                OR prd.department_id IN
+                <foreach collection="myDepartmentIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </when>
+        </choose>
+        <if test="name != '' and name != null">
+            AND p.name like CONCAT('%',#{name},'%')
+        </if>
+        <choose>
+            <when test="statuses.size != 0">
+                AND p.status IN
+                <foreach collection="statuses" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </when>
+        </choose>
+        <choose>
+            <when test="excludeIds.size != 0">
+                AND p.id NOT IN
+                <foreach collection="excludeIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </when>
+        </choose>
     </select>
 
     <!--<select id="findByWorkspaceIdAndIncludeProjectAll" resultType="java.util.HashMap"
diff --git a/src/main/resources/mybatis/query-template/widget-template.xml b/src/main/resources/mybatis/query-template/widget-template.xml
index 26365cf..6da8334 100644
--- a/src/main/resources/mybatis/query-template/widget-template.xml
+++ b/src/main/resources/mybatis/query-template/widget-template.xml
@@ -1325,7 +1325,15 @@
             parameterType="kr.wisestone.owl.web.condition.WidgetCondition">
         SELECT issue_type.name as name, COUNT(issue.id) as issueCount FROM issue
         INNER JOIN issue_type ON issue.issue_type_id = issue_type.id
-        WHERE issue.project_id = #{projectId}
+        WHERE 1=1
+        <choose>
+            <when test="meAndDownProjectIds != null and meAndDownProjectIds.size != 0">
+                AND issue.project_id IN
+                <foreach collection="meAndDownProjectIds" item="item" index="index" separator="," open="(" close=")">
+                    #{item}
+                </foreach>
+            </when>
+        </choose>
         GROUP BY issue_type.name
     </select>
 
diff --git a/src/main/webapp/scripts/app/issue/issueList.controller.js b/src/main/webapp/scripts/app/issue/issueList.controller.js
index f5e8f4d..d770571 100644
--- a/src/main/webapp/scripts/app/issue/issueList.controller.js
+++ b/src/main/webapp/scripts/app/issue/issueList.controller.js
@@ -411,6 +411,7 @@
                                 .setDType("renderer")
                                 .setHWidth("bold " + issueTableConfig.width)
                                 .setDAlign("text-center")
+                                .setColumnTooltip("誘몄셿猷� �븯�쐞�씠�뒋/�쟾泥� �븯�쐞�씠�뒋")
                                 .setDRenderer("DOWN_ISSUE_COUNT"));
                             break;
                     }

--
Gitblit v1.8.0