src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -207,5 +207,9 @@ public static final String USER_LEVEL_ALREADY_IN_USE = "USER_LEVEL_ALREADY_IN_USE"; // 사용자 등급을 사용하고 있는 사용자가 있습니다. public static final String USER_LEVEL_ALREADY = "USER_LEVEL_ALREADY"; // 사용자 등급을 사용하고 있는 사용자가 있습니다. public static final String USER_LEVEL_PERMISSION_DENIED = "USER_LEVEL_PERMISSION_DENIED"; // 사용자 등급 정보를 수정할수 없습니다. public static final String USER_LEVEL_NOT_EXIST = "USER_LEVEL_NOT_EXIST"; // 사용자 등급이 존재하지 않습니다. public static final String USER_LEVEL_NOT_DELETE = "USER_LEVEL_NOT_DELETE"; // 기본 사용자 등급은 삭제할수 없습니다. } src/main/java/kr/wisestone/owl/domain/User.java
@@ -310,10 +310,10 @@ return this.userLevel.getPermission(); } // TEST //public void setPermission(Integer permission) { // this.userLevel.setPermission(permission); //} // wyu - TEST // public void setPermission(Integer permission) { // this.userLevel.setPermission(permission); // } public String getLicensekey() { return licensekey; src/main/java/kr/wisestone/owl/domain/UserLevel.java
@@ -13,6 +13,8 @@ private Long id; private String levelName; private Integer permission; private String defaultYn; private String basicUser; public UserLevel() { } @@ -40,4 +42,20 @@ public void setPermission(Integer permission) { this.permission = permission; } public String getDefaultYn() { return defaultYn; } public void setDefaultYn(String defaultYn) { this.defaultYn = defaultYn; } public String getBasicUser() { return basicUser; } public void setBasicUser(String basicUser) { this.basicUser = basicUser; } } src/main/java/kr/wisestone/owl/repository/UserLevelRepository.java
@@ -1,8 +1,13 @@ package kr.wisestone.owl.repository; import kr.wisestone.owl.domain.User; import kr.wisestone.owl.domain.UserLevel; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.query.Param; import java.util.List; public interface UserLevelRepository extends JpaRepository<UserLevel, Long> { List<UserLevel> findByBasicUser(@Param("basicUser") String basicUser); } src/main/java/kr/wisestone/owl/service/UserLevelService.java
@@ -1,5 +1,6 @@ package kr.wisestone.owl.service; import kr.wisestone.owl.domain.Qna; import kr.wisestone.owl.domain.UserLevel; import kr.wisestone.owl.vo.UserLevelVo; import kr.wisestone.owl.web.condition.UserCondition; @@ -8,8 +9,11 @@ import kr.wisestone.owl.web.form.UserLevelForm; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.ui.Model; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; @@ -18,10 +22,22 @@ UserLevel addSuperUserLevel(); UserLevel addNormalUserLevel(); UserLevel addNormalAdminUserLevel(); List<UserLevelVo> findUser(Map<String, Object> resJsonData, UserLevelCondition make, Pageable pageable); UserLevel getUserLevel(Long id); UserLevel getBasicUserLevel(); void modifyUserLevel(UserLevelForm userLevelForm); void removeUserLevel(UserLevelForm userLevelForm); void detailUserLevel(Map<String, Object> resJsonData, UserLevelCondition make); ModelAndView downloadExcel(HttpServletRequest request, Model model); } src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
@@ -1,32 +1,40 @@ package kr.wisestone.owl.service.impl; 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.User; import kr.wisestone.owl.domain.UserLevel; import kr.wisestone.owl.domain.*; import kr.wisestone.owl.exception.OwlRuntimeException; import kr.wisestone.owl.mapper.UserLevelMapper; import kr.wisestone.owl.mapper.UserMapper; import kr.wisestone.owl.repository.UserLevelRepository; import kr.wisestone.owl.service.UserLevelService; import kr.wisestone.owl.service.UserService; import kr.wisestone.owl.service.WorkspaceService; import kr.wisestone.owl.util.CommonUtil; import kr.wisestone.owl.util.ConvertUtil; import kr.wisestone.owl.vo.ResPage; import kr.wisestone.owl.vo.UserLevelVo; import kr.wisestone.owl.vo.UserVo; import kr.wisestone.owl.vo.*; import kr.wisestone.owl.web.condition.IssueStatusCondition; import kr.wisestone.owl.web.condition.UserCondition; import kr.wisestone.owl.web.condition.UserLevelCondition; import kr.wisestone.owl.web.condition.WorkflowCondition; import kr.wisestone.owl.web.form.ManageUserForm; import kr.wisestone.owl.web.form.ProjectForm; import kr.wisestone.owl.web.form.UserLevelForm; import kr.wisestone.owl.web.view.ExcelView; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.Model; import org.springframework.util.StringUtils; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -42,6 +50,18 @@ @Autowired private UserService userService; @Autowired private UserLevelService userLevelService; @Autowired private WorkspaceService workspaceService; @Autowired private ExcelView excelView; @Autowired private ExcelConditionCheck excelConditionCheck; @Override protected JpaRepository<UserLevel, Long> getRepository() { return this.userLevelRepository; @@ -55,22 +75,34 @@ userLevelRepository.saveAndFlush(userLevel); return userLevel; } // 최고관리자 등급 추가 @Override public UserLevel addSuperUserLevel() { UserLevel userLevel = new UserLevel(); userLevel.setLevelName("최고관리자"); userLevel.setPermission(MngPermission.makeAllPermission()); return addUserLevel("최고관리자", MngPermission.makeAllPermission(),"Y", "N"); } userLevel = userLevelRepository.saveAndFlush(userLevel); return userLevel; public UserLevel addNormalUserLevel() { return addUserLevel("일반회원", 0,"Y" , "Y"); } public UserLevel addNormalAdminUserLevel() { return addUserLevel("일반관리자", MngPermission.makeSubAllPermission(),"N", "N"); } // 사용자 등급 추가 public UserLevel addUserLevel(String name, Integer permission, String defaultYn, String basicUser) { UserLevel userLevel = new UserLevel(); userLevel.setLevelName(name); userLevel.setPermission(permission); userLevel.setDefaultYn(defaultYn); userLevel.setBasicUser(basicUser); return userLevelRepository.saveAndFlush(userLevel); } // 사용자 등급 목록을 가져온다. @Override public List<UserLevelVo> findUser(Map<String, Object> resJsonData, UserLevelCondition condition, Pageable pageable) { UserLevelCondition condition, Pageable pageable) { condition.setPage(pageable.getPageNumber() * pageable.getPageSize()); condition.setPageSize(pageable.getPageSize()); @@ -80,19 +112,72 @@ return this.convertUserLevelVoToMap(results, totalUsersCount, pageable, resJsonData); } // 사용자 등급 ID로 조회한다. @Override public UserLevel getUserLevel(Long id) { if (id == null) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_NOT_EXIST)); } UserLevel userLevel = this.findOne(id); if (userLevel == null) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_NOT_EXIST)); } return userLevel; } @Override public UserLevel getBasicUserLevel() { List<UserLevel> userLevels = userLevelRepository.findByBasicUser("Y"); if (userLevels.size() > 0) { return userLevels.get(0); } return null; } // 사용자 등급 상세 조회한다. @Override public void detailUserLevel(Map<String, Object> resJsonData, UserLevelCondition userLevelCondition) { UserLevelVo userLevelVo = new UserLevelVo(); if (userLevelCondition.getId() != null) { UserLevel userLevel = this.getUserLevel(userLevelCondition.getId()); userLevelVo = ConvertUtil.copyProperties(userLevel, UserLevelVo.class); } resJsonData.put(Constants.RES_KEY_CONTENTS, userLevelVo); } // 사용자 등급 정보를 수정한다. @Override public void modifyUserLevel(UserLevelForm userLevelForm) { userLevelForm.makePermission(); UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class); userLevelRepository.saveAndFlush(userLevel); if (userLevelForm.getId() == 1){ // 사용자 등급이 최고관리자이어야만 정보를 수정할수 있다. userLevelForm.makePermission(); UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class); userLevelRepository.saveAndFlush(userLevel); } else { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_PERMISSION_DENIED)); } } // 사용자 등급을 삭제한다. @Override public void removeUserLevel(UserLevelForm userLevelForm) { if (userLevelForm.getRemoveIds().size() < 1) { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.PROJECT_REMOVE_NOT_SELECT)); } // 기본 사용자 등급 삭제 체크 if (userLevelForm.getDefaultYn() == "Y") { throw new OwlRuntimeException( this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_NOT_DELETE)); } for (Long id : userLevelForm.getRemoveIds()) { @@ -103,9 +188,9 @@ this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_ALREADY_IN_USE)); } } this.userLevelRepository.flush(); } // 검색 결과를 UserLevelVo 로 변환한다. private List<UserLevelVo> convertUserLevelVoToMap(List<Map<String, Object>> results, Long totalUsersCount, Pageable pageable, Map<String, Object> resJsonData) { @@ -126,4 +211,34 @@ return userLevelVos; } // 사용자 목록을 엑셀로 다운로드 한다. @Override public ModelAndView downloadExcel(HttpServletRequest request, Model model) { ModelAndView modelAndView = this.workspaceService.checkUseExcelDownload(model); if (modelAndView != null) { return modelAndView; } Map<String, Object> conditions = new HashMap<>(); // 엑셀 다운로드에 필요한 검색 조건 정보를 추출하고 검색 조건 추출에 오류가 발생하면 경고를 표시해준다. modelAndView = this.excelConditionCheck.checkCondition(conditions, request, model); if (modelAndView != null) { return modelAndView; } UserLevelCondition userLevelCondition = UserLevelCondition.make(conditions); userLevelCondition.setLevelName(this.userLevelService.getUserLevel(this.webAppUtil.getLoginId()).getLevelName()); List<Map<String, Object>> results = this.userLevelMapper.find(userLevelCondition); List<UserLevelVo> userLevelVos = ConvertUtil.convertListToListClass(results, UserLevelVo.class); ExportExcelVo excelInfo = new ExportExcelVo(); excelInfo.setFileName(this.messageAccessor.message("사용자 목록")); excelInfo.addAttrInfos(new ExportExcelAttrVo("levelName", "등급명", 6, ExportExcelAttrVo.ALIGN_CENTER)); excelInfo.setDatas(userLevelVos); model.addAttribute(Constants.EXCEL, excelInfo); return new ModelAndView(this.excelView); } } src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
@@ -228,7 +228,8 @@ this.userInviteService.includePrimaryWorkspace(user, primaryWorkspace); UserLevel userLevel = this.userLevelService.getBasicUserLevel(); user.setUserLevel(userLevel); // edit by zenith for permission at 20200803 /*user.setPermission(MngPermission.USER_PERMISSION_MNG_NONE);*/ @@ -238,6 +239,10 @@ UserLevel userLevel = this.userLevelService.addSuperUserLevel(); user.setUserLevel(userLevel); this.userLevelService.addNormalAdminUserLevel(); this.userLevelService.addNormalUserLevel(); // DepartmentManagement에 임시로 Name, Description 값 추가 DepartmentManagementForm departmentManagementForm = new DepartmentManagementForm(); @@ -1194,7 +1199,7 @@ @Transactional(readOnly = true) public User getUserSession(Map<String, Object> resJsonData, HttpServletRequest httpServletRequest) { User user = this.getUser(this.webAppUtil.getLoginId()); UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class, "password", "permission"); UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class, "password","permission"); // wyu - ignores permission ?? // user에서 Permission 값을 가져와서 userVo 에 setPermission 함 userVo.setPermission(user.getPermission()); userVo.setAccount(CommonUtil.decryptAES128(userVo.getAccount())); src/main/java/kr/wisestone/owl/vo/UserLevelVo.java
@@ -13,6 +13,8 @@ private Long id; private String levelName; private Integer permission; private String defaultYn; private String basicUser; public Boolean permWorkSpaceSetting; public Boolean permProjectSetting; @@ -57,6 +59,22 @@ public void setPermission(Integer permission) { this.permission = permission; } public String getDefaultYn() { return defaultYn; } public void setDefaultYn(String defaultYn) { this.defaultYn = defaultYn; } public String getBasicUser() { return basicUser; } public void setBasicUser(String basicUser) { this.basicUser = basicUser; } public Boolean getModifyPermissionCheck() { return modifyPermissionCheck; } src/main/java/kr/wisestone/owl/web/condition/UserLevelCondition.java
@@ -14,6 +14,8 @@ private Long id; private String levelName; private Integer permission; private String defaultYn; private String basicUser; private Integer page; private Integer pageSize; @@ -45,6 +47,22 @@ this.permission = permission; } public String getDefaultYn() { return defaultYn; } public void setDefaultYn(String defaultYn) { this.defaultYn = defaultYn; } public String getBasicUser() { return basicUser; } public void setBasicUser(String basicUser) { this.basicUser = basicUser; } public Integer getPage() { return page; } src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java
@@ -5,6 +5,7 @@ import kr.wisestone.owl.service.UserLevelService; import kr.wisestone.owl.service.UserService; import kr.wisestone.owl.util.ConvertUtil; import kr.wisestone.owl.web.condition.NoticeCondition; import kr.wisestone.owl.web.condition.UserCondition; import kr.wisestone.owl.web.condition.UserLevelCondition; import kr.wisestone.owl.web.form.UserForm; @@ -56,6 +57,17 @@ return this.setSuccessMessage(resJsonData); } // 사용자등급 상세 조회 @RequestMapping(value = "/userLevel/detail", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody Map<String, Object> detail(@RequestBody Map<String, Map<String, Object>> params) { Map<String, Object> resJsonData = new HashMap<>(); this.userLevelService.detailUserLevel(resJsonData, UserLevelCondition.make(params.get(Constants.REQ_KEY_CONTENT))); return this.setSuccessMessage(resJsonData); } // 사용자등급 수정 @RequestMapping(value = "/userLevel/modify", produces = MediaType.APPLICATION_JSON_VALUE) public @@ -81,11 +93,12 @@ return this.setSuccessMessage(resJsonData); } // 사용자 등급 엑셀 다운로드 // @RequestMapping(value = "/userLevel/downloadExcel", method = RequestMethod.POST) // public ModelAndView downloadExcel(HttpServletRequest request, Model model) { // return this.userService.downloadExcel(model); // } @RequestMapping(value = "/userLevel/downloadExcel", method = RequestMethod.POST) public ModelAndView downloadExcel(HttpServletRequest request, Model model) { return this.userLevelService.downloadExcel(request, model); } /*// 이벤트 당첨자 엑셀 다운로드 @RequestMapping(value = "/user/downloadExcelEvent", method = RequestMethod.POST) src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java
@@ -17,6 +17,8 @@ private Long id; private String levelName; private Integer permission; private String defaultYn; private String basicUser; private List<Long> removeIds = Lists.newArrayList(); public Boolean permWorkspaceSetting; @@ -68,6 +70,22 @@ this.permission = permission; } public String getDefaultYn() { return defaultYn; } public void setDefaultYn(String defaultYn) { this.defaultYn = defaultYn; } public String getBasicUser() { return basicUser; } public void setBasicUser(String basicUser) { this.basicUser = basicUser; } public Boolean getPermWorkspaceSetting() { return permWorkspaceSetting; } src/main/resources/migration/V1_10__Alter_Table.sql
@@ -21,5 +21,8 @@ `register_date` TIMESTAMP NULL COMMENT 'register_date', `modify_id` BIGINT(20) NOT NULL COMMENT 'modify_id', `modify_date` TIMESTAMP NULL COMMENT 'modify_date', `default_yn` VARCHAR (1) NOT NULL DEFAULT 'N', `basic_user` VARCHAR (1) NOT NULL DEFAULT 'N', PRIMARY KEY (`id`) USING btree ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; src/main/resources/mybatis/query-template/user-template.xml
@@ -173,7 +173,7 @@ <select id="findByLevelId" resultType="java.lang.Long" parameterType="java.lang.Long"> SELECT count(u.id) FROM user u WHERE u.level_id = #{levelId} WHERE u.level_id = #{id} </select> </mapper> src/main/resources/mybatis/query-template/userLevel-template.xml
@@ -14,6 +14,9 @@ <if test="levelName != '' and levelName != null"> AND ul.level_name like CONCAT('%',#{levelName},'%') </if> <if test="id != '' and id != null"> AND ul.id like CONCAT('%',#{id},'%') </if> limit #{pageSize} offset #{page}; </select>