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