OWL ITS + 탐지시스템(인터넷 진흥원)
wyu
2021-11-03 76806da455b31bdcff001d866afde72a284e00ff
- 사용자 등급관리 생성,수정,삭제까지 진행
17개 파일 변경됨
577 ■■■■ 파일 변경됨
src/main/java/kr/wisestone/owl/constant/MsgConstants.java 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/mapper/UserMapper.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/UserLevelService.java 11 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/UserService.java 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java 55 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java 13 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/vo/UserLevelVo.java 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java 45 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java 121 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/resources/mybatis/query-template/user-template.xml 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js 34 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js 49 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js 42 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js 88 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js 32 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspaceDepartmentConfig.html 2 ●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/views/workspace/workspaceLevelAdd.html 34 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/java/kr/wisestone/owl/constant/MsgConstants.java
@@ -204,6 +204,6 @@
    public static final String PAGE_NEGATIVE_OR_NULL = "PAGE_NEGATIVE_OR_NULL"; //  요청한 페이지 정보가 잘못되었습니다.
    public static final String PAGE_SIZE_NEGATIVE_OR_NULL = "PAGE_SIZE_NEGATIVE_OR_NULL";   //  요청한 페이지 크기가 잘못되었습니다.
    public static final String USER_LEVEL_ALREADY = "USER_LEVEL_ALREADY"; // 사용자 등급을 사용하고 있는 사용자가 있습니다.
}
src/main/java/kr/wisestone/owl/mapper/UserMapper.java
@@ -1,5 +1,6 @@
package kr.wisestone.owl.mapper;
import kr.wisestone.owl.domain.User;
import kr.wisestone.owl.web.condition.UserCondition;
import org.springframework.stereotype.Repository;
@@ -29,4 +30,5 @@
    List<Map<String, Object>> findEvent();
    Long findByLevelId(Long levelId);
}
src/main/java/kr/wisestone/owl/service/UserLevelService.java
@@ -4,9 +4,11 @@
import kr.wisestone.owl.vo.UserLevelVo;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.condition.UserLevelCondition;
import kr.wisestone.owl.web.form.UserForm;
import kr.wisestone.owl.web.form.UserLevelForm;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
@@ -14,5 +16,12 @@
public interface UserLevelService extends AbstractService<UserLevel, Long, JpaRepository<UserLevel, Long>> {
    UserLevel addUserLevel(UserLevelForm userLevelForm);
    List<UserLevelVo> findUser(Map<String, Object> resJsonData, UserLevelCondition make, Pageable pageable);
    UserLevel addSuperUserLevel();
    List<UserLevelVo> findUser(Map<String, Object> resJsonData,
                                    UserLevelCondition make, Pageable pageable);
    void modifyUserLevel(UserLevelForm userLevelForm);
    void removeUserLevel(UserLevelForm userLevelForm);
}
src/main/java/kr/wisestone/owl/service/UserService.java
@@ -80,5 +80,7 @@
    void updateLastLogin();
    boolean useUserLevel(Long id);
    //ModelAndView downloadExcelEvent(Model model);
}
src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
@@ -2,11 +2,16 @@
import com.google.common.collect.Lists;
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.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.util.CommonUtil;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.vo.ResPage;
@@ -14,11 +19,13 @@
import kr.wisestone.owl.vo.UserVo;
import kr.wisestone.owl.web.condition.UserCondition;
import kr.wisestone.owl.web.condition.UserLevelCondition;
import kr.wisestone.owl.web.form.ManageUserForm;
import kr.wisestone.owl.web.form.UserLevelForm;
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.util.StringUtils;
import java.util.List;
import java.util.Map;
@@ -32,21 +39,38 @@
    @Autowired
    private UserLevelMapper userLevelMapper;
    @Autowired
    private UserService userService;
    @Override
    protected JpaRepository<UserLevel, Long> getRepository() {
        return this.userLevelRepository;
    }
    // 사용자 가입 후 UserLevel 값 저장
    @Override
    public UserLevel addUserLevel(UserLevelForm userLevelForm) {
        userLevelForm.makePermission();
        UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class);
        userLevelRepository.saveAndFlush(userLevel);
        return userLevel;
    }
    // 최고관리자 등급 추가
    @Override
    public List<UserLevelVo> findUser(Map<String, Object> resJsonData, UserLevelCondition condition,
                         Pageable pageable) {
    public UserLevel addSuperUserLevel() {
        UserLevel userLevel = new UserLevel();
        userLevel.setLevelName("최고관리자");
        userLevel.setPermission(MngPermission.makeAllPermission());
        userLevel = userLevelRepository.saveAndFlush(userLevel);
        return userLevel;
    }
    // 사용자 등급 목록을 가져온다.
    @Override
    public List<UserLevelVo> findUser(Map<String, Object> resJsonData,
                                           UserLevelCondition condition, Pageable pageable) {
        condition.setPage(pageable.getPageNumber() * pageable.getPageSize());
        condition.setPageSize(pageable.getPageSize());
@@ -56,6 +80,32 @@
        return this.convertUserLevelVoToMap(results, totalUsersCount, pageable, resJsonData);
    }
    //  사용자 등급 정보를 수정한다.
    @Override
    public void modifyUserLevel(UserLevelForm userLevelForm) {
        userLevelForm.makePermission();
        UserLevel userLevel = ConvertUtil.copyProperties(userLevelForm, UserLevel.class);
        userLevelRepository.saveAndFlush(userLevel);
    }
    @Override
    public void removeUserLevel(UserLevelForm userLevelForm) {
        if (userLevelForm.getRemoveIds().size() < 1) {
            throw new OwlRuntimeException(
                    this.messageAccessor.getMessage(MsgConstants.PROJECT_REMOVE_NOT_SELECT));
        }
        for (Long id : userLevelForm.getRemoveIds()) {
            if (!this.userService.useUserLevel(id)) {
                this.userLevelRepository.deleteById(id);
            } else {
                throw new OwlRuntimeException(
                        this.messageAccessor.getMessage(MsgConstants.USER_LEVEL_ALREADY));
            }
        }
        this.userLevelRepository.flush();
    }
    //  검색 결과를 UserLevelVo 로 변환한다.
    private List<UserLevelVo> convertUserLevelVoToMap(List<Map<String, Object>> results, Long totalUsersCount, Pageable pageable, Map<String, Object> resJsonData) {
@@ -63,6 +113,7 @@
        for (Map<String, Object> result : results) {
            UserLevelVo userLevelVo = ConvertUtil.convertMapToClass(result, UserLevelVo.class);
            userLevelVo.toPermissionValues();
            userLevelVos.add(userLevelVo);
        }
src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
@@ -235,13 +235,7 @@
        } else if(validAdmin == 1) {    // 라이센스 입력 관리자
            Workspace primaryWorkspace = this.workspaceService.getPrimaryWorkspace();
            // UserLevel에 Permission 값 넣어줌
            UserLevelForm userLevelForm = new UserLevelForm();
            // Constants 에서 ADMIN 값 추가
            userLevelForm.setLevelName(Constants.ADMIN_MANAGER);
            // Permission 값 추가
            userLevelForm.setPermission(MngPermission.makeAllPermission());
            UserLevel userLevel = this.userLevelService.addUserLevel(userLevelForm);
            UserLevel userLevel = this.userLevelService.addSuperUserLevel();
            user.setUserLevel(userLevel);
            // DepartmentManagement에 임시로 Name, Description 값 추가
@@ -1033,6 +1027,11 @@
        this.userRepository.saveAndFlush(user);
    }
    @Override
    public boolean useUserLevel(Long levelId) {
        return this.userMapper.findByLevelId(levelId) > 0;
    }
    //  마지막으로 선택한 프로젝트 정보를 저장한다.
    @Override
    @Transactional
src/main/java/kr/wisestone/owl/vo/UserLevelVo.java
@@ -1,6 +1,7 @@
package kr.wisestone.owl.vo;
import com.google.common.collect.Lists;
import kr.wisestone.owl.constant.MngPermission;
import java.util.List;
@@ -13,12 +14,24 @@
    private String levelName;
    private Integer permission;
    public Boolean permWorkSpace;
    public Boolean permProjectSetting;
    public Boolean permIssueSetting;
    public Boolean permUser;
    public Boolean permNotice;
    public Boolean permFAQ;
    public Boolean permQnA;
    public Boolean permEvent;
    public Boolean permGuide;
    private Boolean modifyPermissionCheck = Boolean.TRUE;
    public UserLevelVo() {
    }
    public UserLevelVo(Long id, String levelname, Integer permission) {
    public UserLevelVo(Long id, String levelName, Integer permission) {
        this.id = id;
        this.levelName = levelname;
        this.levelName = levelName;
        this.permission = permission;
    }
@@ -42,7 +55,26 @@
        return permission;
    }
    public void setPermission(Integer permission) {
        this.permission = permission;
    public void setPermission(Integer permission) { this.permission = permission; }
    public Boolean getModifyPermissionCheck() {
        return modifyPermissionCheck;
    }
    public void setModifyPermissionCheck(Boolean modifyPermissionCheck) {
        this.modifyPermissionCheck = modifyPermissionCheck;
    }
    public void toPermissionValues() {
        this.permWorkSpace = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_WORKSPACE);
        this.permProjectSetting = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_PROJECT);
        this.permIssueSetting = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_ISSUE_SETTING);
        this.permUser = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_USER);
        this.permNotice = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_NOTICE);
        this.permFAQ = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_FAQ);
        this.permQnA = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_QNA);
        this.permEvent = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_EVENT);
        this.permGuide = MngPermission.checkMngPermission(this.permission, MngPermission.USER_PERMISSION_MNG_GUIDE);
    }
}
src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java
@@ -35,9 +35,9 @@
    @RequestMapping(value = "/userLevel/add", method = RequestMethod.POST)
    public
    @ResponseBody
    Map<String, Object> addUserLevel(MultipartHttpServletRequest request) {
    Map<String, Object> addUserLevel(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        Map<String, Object> content = ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT));
        Map<String, Object> content = params.get(Constants.REQ_KEY_CONTENT);
        this.userLevelService.addUserLevel(UserLevelForm.make(content));
        return this.setSuccessMessage(resJsonData);
@@ -57,28 +57,29 @@
    }
    //  사용자등급 수정
//    @RequestMapping(value = "/userLevel/modify", produces = MediaType.APPLICATION_JSON_VALUE)
//    public
//    @ResponseBody
//    Map<String, Object> modify(MultipartHttpServletRequest request) {
//        Map<String, Object> resJsonData = new HashMap<>();
//
//        this.userService.modifyUser(UserForm.make(ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT))), request.getFile("file"));
//
//        return this.setSuccessMessage(resJsonData);
//    }
    @RequestMapping(value = "/userLevel/modify", produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> modify(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        Map<String, Object> content = params.get(Constants.REQ_KEY_CONTENT);
        this.userLevelService.modifyUserLevel(UserLevelForm.make(content));
        return this.setSuccessMessage(resJsonData);
    }
    //  사용자등급 삭제
//    @RequestMapping(value = "/userLevel/remove", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
//    public
//    @ResponseBody
//    Map<String, Object> withDraw() {
//        Map<String, Object> resJsonData = new HashMap<>();
//
//        this.userService.withDrawUser();
//
//        return this.setSuccessMessage(resJsonData);
//    }
    @RequestMapping(value = "/userLevel/remove", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
    public
    @ResponseBody
    Map<String, Object> remove(@RequestBody Map<String, Map<String, Object>> params) {
        Map<String, Object> resJsonData = new HashMap<>();
        Map<String, Object> content = params.get(Constants.REQ_KEY_CONTENT);
        this.userLevelService.removeUserLevel(UserLevelForm.make(content));
        return this.setSuccessMessage(resJsonData);
    }
    //  사용자 등급 엑셀 다운로드
//    @RequestMapping(value = "/userLevel/downloadExcel", method = RequestMethod.POST)
src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java
@@ -1,8 +1,13 @@
package kr.wisestone.owl.web.form;
import com.google.common.collect.Lists;
import kr.wisestone.owl.constant.MngPermission;
import kr.wisestone.owl.domain.User;
import kr.wisestone.owl.domain.UserLevel;
import kr.wisestone.owl.util.ConvertUtil;
import kr.wisestone.owl.util.MapUtil;
import java.util.List;
import java.util.Map;
/**
@@ -13,10 +18,37 @@
    private String levelName;
    private Integer permission;
    private List<Long> removeIds = Lists.newArrayList();
    public Boolean permWorkspaceSetting;
    public Boolean permProjectSetting;
    public Boolean permIssueSetting;
    public Boolean permUser;
    public Boolean permNotice;
    public Boolean permFAQ;
    public Boolean permQnA;
    public Boolean permGuide;
    public Boolean permEvent;
    public UserLevelForm(){}
    public static UserLevelForm make(Map<String, Object> params) {
        return ConvertUtil.convertMapToClass(params, UserLevelForm.class);
        UserLevelForm form = ConvertUtil.convertMapToClass(params, UserLevelForm.class);
        if (MapUtil.getLongs(params, "removeIds") != null) {
            form.setRemoveIds(MapUtil.getLongs(params, "removeIds"));
        }
        return form;
    }
    public Boolean getPermWorkspaceSetting() {
        return permWorkspaceSetting;
    }
    public void setPermWorkspaceSetting(Boolean permWorkspaceSetting) {
        this.permWorkspaceSetting = permWorkspaceSetting;
    }
    public Long getId() {
@@ -42,4 +74,91 @@
    public void setPermission(Integer permission) {
        this.permission = permission;
    }
    public Boolean getPermProjectSetting() {
        return permProjectSetting;
    }
    public void setPermProjectSetting(Boolean permProjectSetting) {
        this.permProjectSetting = permProjectSetting;
    }
    public Boolean getPermIssueSetting() {
        return permIssueSetting;
    }
    public void setPermIssueSetting(Boolean permIssueSetting) {
        this.permIssueSetting = permIssueSetting;
    }
    public Boolean getPermUser() {
        return permUser;
    }
    public void setPermUser(Boolean permUser) {
        this.permUser = permUser;
    }
    public Boolean getPermNotice() {
        return permNotice;
    }
    public void setPermNotice(Boolean permNotice) {
        this.permNotice = permNotice;
    }
    public Boolean getPermFAQ() {
        return permFAQ;
    }
    public void setPermFAQ(Boolean permFAQ) {
        this.permFAQ = permFAQ;
    }
    public Boolean getPermQnA() {
        return permQnA;
    }
    public void setPermQnA(Boolean permQnA) {
        this.permQnA = permQnA;
    }
    public Boolean getPermEvent() {
        return permEvent;
    }
    public void setPermEvent(Boolean permEvent) {
        this.permEvent = permEvent;
    }
    public Boolean getPermGuide() {
        return permGuide;
    }
    public void setPermGuide(Boolean permGuide) {
        this.permGuide = permGuide;
    }
    public List<Long> getRemoveIds() {
        return removeIds;
    }
    public void setRemoveIds(List<Long> removeIds) {
        this.removeIds = removeIds;
    }
    public void makePermission() {
        this.permission = MngPermission.USER_PERMISSION_MNG_NONE;
        this.permission |= MngPermission.makePermission(getPermWorkspaceSetting(), MngPermission.USER_PERMISSION_MNG_WORKSPACE);
        this.permission |= MngPermission.makePermission(getPermProjectSetting(), MngPermission.USER_PERMISSION_MNG_PROJECT);
        this.permission |= MngPermission.makePermission(getPermIssueSetting(), MngPermission.USER_PERMISSION_MNG_ISSUE_SETTING);
        this.permission |= MngPermission.makePermission(getPermUser(), MngPermission.USER_PERMISSION_MNG_USER);
        this.permission |= MngPermission.makePermission(getPermNotice(), MngPermission.USER_PERMISSION_MNG_NOTICE);
        this.permission |= MngPermission.makePermission(getPermFAQ(), MngPermission.USER_PERMISSION_MNG_FAQ);
        this.permission |= MngPermission.makePermission(getPermQnA(), MngPermission.USER_PERMISSION_MNG_QNA);
        this.permission |= MngPermission.makePermission(getPermGuide(), MngPermission.USER_PERMISSION_MNG_GUIDE);
    }
}
src/main/resources/mybatis/query-template/user-template.xml
@@ -170,5 +170,10 @@
        GROUP BY u.id ORDER BY issueCount desc, loginCount DESC;
    </select>
    <select id="findByLevelId" resultType="java.util.HashMap" parameterType="java.lang.Long">
        SELECT count(u.id)
        FROM user u
        WHERE u.level_id = #{id}
    </select>
</mapper>
src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js
@@ -29,7 +29,7 @@
                    selectedPageRowCount : String(10)
                };
                $scope.vm.tableConfigs = [];
                $scope.vm.tableConfigs2 = [];
                $scope.vm.responseData = {
                    data : []
                };
@@ -51,23 +51,23 @@
                //  부서 관리 테이블 설정
                function makeTableConfigs() {
                    $scope.vm.tableConfigs = [];
                    $scope.vm.tableConfigs2 = [];
                    $scope.vm.tableConfigs.push($tableProvider.config()
                    $scope.vm.tableConfigs2.push($tableProvider.config()
                        .setDType("checkbox")
                        .setHWidth("width-20-p")
                        .setDAlign("text-center"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                    $scope.vm.tableConfigs2.push($tableProvider.config()
                        .setHName("manageDepartment.departmentName")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("levelName"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                    $scope.vm.tableConfigs2.push($tableProvider.config()
                        .setHName("manageDepartment.departmentEx")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
                        .setDName("manageProject"));
                    $scope.vm.tableConfigs.push($tableProvider.config()
                    $scope.vm.tableConfigs2.push($tableProvider.config()
                        .setHName("manageDepartment.departmentCount")
                        .setHWidth("width-120-p")
                        .setDAlign("text-center")
@@ -95,17 +95,17 @@
                    };
                    //테이블 리스트 데이터 컨트롤러 요청
                    UserWorkspace.departmentFind($resourceProvider.getContent(conditions,
                        $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.vm.page.selectedPage = currentPage + 1;
                            $scope.vm.responseData = result.data;
                        }
                        else {
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullUserList"), result.data.message.message); // "업무 공간 전체 사용자 목록 조회 실패"
                        }
                    });
                    // UserWorkspace.departmentFind($resourceProvider.getContent(conditions,
                    //     $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
                    //
                    //     if (result.data.message.status === "success") {
                    //         $scope.vm.page.selectedPage = currentPage + 1;
                    //         $scope.vm.responseData = result.data;
                    //     }
                    //     else {
                    //         SweetAlert.error($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullUserList"), result.data.message.message); // "업무 공간 전체 사용자 목록 조회 실패"
                    //     }
                    // });
                }
                //  부서 추가
                function departmentAdd() {
src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js
@@ -4,29 +4,31 @@
'use strict';
define([
        'app'
        'app',
        'angular'
    ],
    function (app) {
        app.controller('workspaceLevelAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', 'SweetAlert', '$uibModal', '$uibModalInstance', '$state', 'Workspace', '$filter', 'parameter', '$timeout',
            function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $uibModalInstance, Workspace, $filter, parameter) {
    function (app, angular) {
        app.controller('workspaceLevelAddController', ['$scope', '$rootScope', '$log', '$resourceProvider', 'SweetAlert', '$uibModal', '$uibModalInstance', 'UserWorkspace', 'Workspace', '$filter', 'parameter',
            function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $uibModalInstance, UserWorkspace, Workspace, $filter, parameter) {
                $scope.fn = {
                    cancel : cancel,    //  팝업 창 닫기
                    formSubmit : formSubmit,    //  폼 전송
                    formCheck : formCheck,   //  폼 체크
                    modifyUserPermission : modifyUserPermission   //  업무 공간 참여하는 사용자의 참여 상태 변경
                };
                $scope.vm = {
                    form : {
                        levelName : "",
                        permWorkspaceSetting : "",
                        permProjectSetting : "",
                        permIssueSetting : "",
                        permUser : "",
                        permNotice : "",
                        permFAQ : "",
                        permQnA : "",
                        permGuide : ""
                        permWorkspaceSetting : false,
                        permProjectSetting : false,
                        permIssueSetting : false,
                        permUser : false,
                        permNotice : false,
                        permFAQ : false,
                        permQnA : false,
                        permGuide : false
                    }
                };
@@ -40,17 +42,11 @@
                }
                //  폼 전송
                function formSubmit() {
                function formSubmit(condistion) {
                    $rootScope.spinner = true;
                    var content = {
                        title : $rootScope.preventXss($scope.vm.form.levelName),
                        description : $rootScope.preventXss($scope.vm.form.description)
                    };
                    UserWorkspace.levelAdd($resourceProvider.getContent(
                        content,
                        $resourceProvider.getPageContent(0, 10))).then(function (result) {
                    UserWorkspace.levelAdd($resourceProvider.getContent(condistion,
                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.fn.cancel();
@@ -72,6 +68,17 @@
                    $uibModalInstance.dismiss('cancel');
                    $(document).unbind("keydown");  //  단축키 이벤트 제거
                }
                function modifyUserPermission(userPermission ) {
                    UserWorkspace.levelModify($resourceProvider.getContent(userPermission,
                        $resourceProvider.getPageContent(0, 0))).then(function (result) {
                        if (result.data.message.status === "success") {
                        }
                        else {
                            SweetAlert.error($filter("translate")("managementWorkspace.failedToParticipationStatusChange"), result.data.message.message); // "참여 상태 변경 실패"
                        }
                    });
                }
            }
        ]);
src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
@@ -19,7 +19,7 @@
                $scope.fn.initSearch = initSearch;  //  검색 조건 초기화
                $scope.fn.changePageRowCount = changePageRowCount;  //  업무 공간 참여 사용자 목록 보기 개수 변경
                $scope.fn.getLevels = getLevels; // 등급 목록 가져오기
                $scope.fn.getDepartments = getDepartments; // 부서 목록 가져오기
                // $scope.fn.getDepartments = getDepartments; // 부서 목록 가져오기
                /*  $scope.vm 상속 중  */
                $scope.vm.search = {
@@ -192,27 +192,27 @@
                }
                //  부서 목록
                function getDepartments() {
                    var deferred = $q.defer();
                // function getDepartments() {
                //     var deferred = $q.defer();
                //
                //     UserWorkspace.departmentFind($resourceProvider.getContent({},
                //         $resourceProvider.getPageContent(0, 1000))).then(function (result) {
                //
                //         if (result.data.message.status === "success") {
                //             $scope.vm.search.departments = result.data.data;
                //         }
                //         else {
                //             SweetAlert.swal($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullUserList"), result.data.message.message, "error"); // 업무 공간 전체 사용자 목록 조회 실패
                //         }
                //
                //         deferred.resolve(result.data.data);
                //     });
                //
                //     return deferred.promise;
                // }
                    UserWorkspace.departmentFind($resourceProvider.getContent({},
                        $resourceProvider.getPageContent(0, 1000))).then(function (result) {
                        if (result.data.message.status === "success") {
                            $scope.vm.search.departments = result.data.data;
                        }
                        else {
                            SweetAlert.swal($filter("translate")("managementWorkspace.failedToSelectWorkspaceFullUserList"), result.data.message.message, "error"); // 업무 공간 전체 사용자 목록 조회 실패
                        }
                        deferred.resolve(result.data.data);
                    });
                    return deferred.promise;
                }
                // $scope.fn.makeTableConfigs();
                // $scope.fn.getUserWorkspaceList();
                $scope.fn.makeTableConfigs();
                $scope.fn.getUserWorkspaceList();
            }
        ]);
    }
src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
@@ -9,7 +9,7 @@
    ],
    function (app, angular) {
        app.controller('workspaceUserLevelController', ['$scope', '$rootScope', '$log', '$resourceProvider', 'SweetAlert', '$uibModal', '$q', '$state', '$tableProvider', 'Payment', 'Workspace',
            'UserWorkspace', 'Workspace', '$filter',
            'UserWorkspace', '$filter',
            function ($scope, $rootScope, $log, $resourceProvider, SweetAlert, $uibModal, $q, $state, $tableProvider, Payment, Workspace, UserWorkspace, $filter) {
@@ -18,6 +18,7 @@
                $scope.fn.makeTableConfigs = makeTableConfigs;  //  사용자 등급 관리 목록 테이블 설정
                $scope.fn.initSearch = initSearch;  //  검색 조건 초기화
                $scope.fn.levelAdd = levelAdd;    //  등급 추가
                $scope.fn.removes = removes;    // 사용자 등급 삭제
                /*  $scope.vm 상속 중  */
                $scope.vm.search = {
@@ -45,6 +46,84 @@
                    $scope.fn.getUserLevelList(0);
                });
                // 사용자 등급 삭제
                function removes() {
                    var removeIds = [];
                    var removePermission = true;
                    angular.forEach($scope.vm.responseData.data, function (data) {
                        if (data.checked && data.modifyPermissionCheck) {
                            removeIds.push(data.id);
                        }
                        if (data.checked && !data.modifyPermissionCheck) {
                            removePermission = false;
                        }
                    });
                    if (!removePermission) {
                        SweetAlert.swal({
                            html : true,
                            title : $filter("translate")("common.deleteFailed"), // 삭제 실패
                            text : $filter("translate")("issue.notHaveDeletePermissionExistsAnIssue"), // 삭제 권한이 없는 이슈가 존재합니다.
                            type : "error"
                        });
                        return;
                    }
                    if (removeIds.length < 1) {
                        SweetAlert.swal({
                            title : $filter("translate")("common.checkPurgingTargets"), // 삭제 대상 확인
                            text : $filter("translate")("common.selectDestinationDeletion"), // 삭제 대상을 선택하세요.
                            type : "warning"
                        });
                        return;
                    }
                    //  삭제 알림
                    SweetAlert.swal({
                            title : $filter("translate")("issue.deleteIssue"), // 이슈 삭제
                            text : $filter("translate")("issue.wantToDeleteSelectIssue"), // 선택한 이슈을 삭제하겠습니까? 삭제된 이슈은 복구할 수 없습니다.
                            type : "warning",
                            showCancelButton : true,
                            confirmButtonColor : "#DD6B55",
                            confirmButtonText : $filter("translate")("common.delete"), // 삭제
                            cancelButtonText : $filter("translate")("common.cancel"), // 취소
                            closeOnConfirm : false,
                            closeOnCancel : true
                        },
                        function (isConfirm) {
                            SweetAlert.close();
                            if (isConfirm) {
                                $rootScope.spinner = true;
                                UserWorkspace.levelRemove($resourceProvider.getContent(
                                    { removeIds : removeIds },
                                    $resourceProvider.getPageContent(0, 0))).then(function (result) {
                                    if (result.data.message.status === "success") {
                                        $timeout(function () {
                                            SweetAlert.success($filter("translate")("common.deleteSucceeded"), result.data.message.message); // 삭제 성공
                                        }, 100);
                                        $scope.fn.listView();
                                        $scope.fn.getPageList(0);
                                    }
                                    else {
                                        $timeout(function () {
                                            SweetAlert.error($filter("translate")("common.deleteFailed"), result.data.message.message); // 삭제 실패
                                        }, 100);
                                    }
                                    $rootScope.spinner = false;
                                });
                            }
                        });
                }
                //  검색 조건 초기화
                function initSearch() {
                    //$scope.vm.search.name = "";
@@ -67,6 +146,13 @@
                        .setDAlign("text-center")
                        .setDName("levelName"));
                    $scope.vm.tableConfigs1.push($tableProvider.config()
                        .setHName("manageUser.manageWorkspacePerm")
                        .setHWidth("width-120-p")
                        .setDType("renderer")
                        .setDAlign("text-center")
                        .setDName("manageProject")
                        .setDRenderer("WORKSPACE_USE_YN"));
                    $scope.vm.tableConfigs1.push($tableProvider.config()
                        .setHName("manageUser.manageProjectPerm")
                        .setHWidth("width-120-p")
                        .setDType("renderer")
src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js
@@ -12,24 +12,36 @@
                    return response;
                });
            },
            departmentFind : function (conditions) {
                return $http.post("userWorkspace/departmentFind", conditions).then(function (response) {
                    $log.debug("부서 목록 : ", response);
                    return response;
                });
            },
            levelAdd : function (conditions) {
                return $http.post("userWorkspace/levelAdd", conditions).then(function (response) {
                return $http.post("userLevel/add", conditions).then(function (response) {
                    $log.debug("사용자 등급 생성 결과 : ", response);
                    return response;
                });
            },
            departmentAdd : function (conditions) {
                return $http.post("userWorkspace/departmentAdd", conditions).then(function (response) {
                    $log.debug("부서 생성 결과 : ", response);
            levelModify : function (conditions) {
                return $http.post("userLevel/modify", conditions).then(function (response) {
                    $log.debug("사용자 등급 수정 결과 : ", response);
                    return response;
                });
            },
            levelRemove : function (conditions) {
                return $http.post("userLevel/remove", conditions).then(function (response) {
                    $log.debug("사용자 등급 삭제 결과 : ", response);
                    return response;
                });
            },
            // departmentFind : function (conditions) {
            //     return $http.post("userWorkspace/departmentFind", conditions).then(function (response) {
            //         $log.debug("부서 목록 : ", response);
            //         return response;
            //     });
            // },
            // departmentAdd : function (conditions) {
            //     return $http.post("userWorkspace/departmentAdd", conditions).then(function (response) {
            //         $log.debug("부서 생성 결과 : ", response);
            //         return response;
            //     });
            // },
            find : function (conditions) {
                return $http.post("userWorkspace/find", conditions).then(function (response) {
                    $log.debug("워크스페이스에 참여하는 전체 사용자 목록 : ", response);
src/main/webapp/views/workspace/workspaceDepartmentConfig.html
@@ -134,7 +134,7 @@
            </div>
            <div class="table-responsive">
                <js-table data="vm.responseData.data" table-configs="vm.tableConfigs"
                <js-table data="vm.responseData.data" table-configs="vm.tableConfigs2"
                          event="vm.tableEvent"></js-table>
            </div>
src/main/webapp/views/workspace/workspaceLevelAdd.html
@@ -33,7 +33,7 @@
                        <span translate="manageUser.manageWorkspacePerm">워크스페이스 관리</span>
                    </td>
                    <td colspan="2">
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permWorkspaceSetting' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permWorkspaceSetting'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
@@ -41,15 +41,7 @@
                        <span translate="manageUser.manageProjectPerm">프로젝트 관리</span>
                    </td>
                    <td colspan="2">
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permProjectSetting' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageUserPerm">사용자 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permUser' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permProjectSetting'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
@@ -57,7 +49,15 @@
                        <span translate="manageUser.manageIssueSystemPerm">이슈 시스템 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permIssueSetting' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permIssueSetting' ><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
                    <td class="text-left bold">
                        <span translate="manageUser.manageUserPerm">사용자 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permUser'><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
@@ -65,7 +65,7 @@
                        <span translate="manageUser.manageNoticePerm">공지사항 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permNotice' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permNotice' ><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
@@ -73,7 +73,7 @@
                        <span translate="manageUser.manageFAQPerm">FAQ 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permFAQ' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permFAQ' ><span class='slider round'></span></label>
                    </td>
                </tr>
                <tr>
@@ -81,7 +81,7 @@
                        <span translate="manageUser.manageQnAPerm">QnA 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permQnA' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permQnA' ><span class='slider round'></span></label>
                    </td>
                </tr>
@@ -90,7 +90,7 @@
                        <span translate="manageUser.manageGuidePerm">가이드 관리</span>
                    </td>
                    <td>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permGuide' ng-click='event.modifyUserPermission(data)'><span class='slider round'></span></label>
                        <label class='switch'><input type='checkbox' ng-model='vm.form.permGuide' ><span class='slider round'></span></label>
                    </td>
                </tr>
            </table>
@@ -101,9 +101,9 @@
        <button type="button" class="btn btn-md btn-grey" ng-click="fn.cancel()"><span translate="common.cancel">취소</span></button>
        <button type="button" class="btn btn-md btn-primary bold"
                js-short-cut
                js-short-cut-action="(fn.formCheck(levelAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit()"
                js-short-cut-action="(fn.formCheck(levelAddForm.$invalid) || $root.spinner) ? null : fn.formSubmit(vm.form)"
                ng-disabled="fn.formCheck(paymentAddForm.$invalid)"
                ng-click="fn.formSubmit()"><span translate="common.save">저장</span>
                ng-click="fn.formSubmit(vm.form)"><span translate="common.save">저장</span>
        </button>
    </div>
</div>