From 76806da455b31bdcff001d866afde72a284e00ff Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 수, 03 11월 2021 08:57:43 +0900
Subject: [PATCH] - 사용자 등급관리 생성,수정,삭제까지 진행

---
 src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java        |   45 ++--
 src/main/resources/mybatis/query-template/user-template.xml                   |    5 
 src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java         |   55 +++++
 src/main/java/kr/wisestone/owl/constant/MsgConstants.java                     |    2 
 src/main/java/kr/wisestone/owl/service/UserLevelService.java                  |   11 +
 src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js  |   88 ++++++++
 src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js     |   32 ++-
 src/main/webapp/views/workspace/workspaceDepartmentConfig.html                |    2 
 src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js         |   49 ++--
 src/main/java/kr/wisestone/owl/vo/UserLevelVo.java                            |   40 +++
 src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js       |   42 ++--
 src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java              |   13 
 src/main/webapp/views/workspace/workspaceLevelAdd.html                        |   34 +-
 src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java                    |  121 ++++++++++++
 src/main/java/kr/wisestone/owl/mapper/UserMapper.java                         |    2 
 src/main/java/kr/wisestone/owl/service/UserService.java                       |    2 
 src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js |   34 +-
 17 files changed, 451 insertions(+), 126 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java b/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
index d01a82c..6fa3dd9 100644
--- a/src/main/java/kr/wisestone/owl/constant/MsgConstants.java
+++ b/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"; // �궗�슜�옄 �벑湲됱쓣 �궗�슜�븯怨� �엳�뒗 �궗�슜�옄媛� �엳�뒿�땲�떎.
 
 }
diff --git a/src/main/java/kr/wisestone/owl/mapper/UserMapper.java b/src/main/java/kr/wisestone/owl/mapper/UserMapper.java
index b1522b8..6ed585e 100644
--- a/src/main/java/kr/wisestone/owl/mapper/UserMapper.java
+++ b/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);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/UserLevelService.java b/src/main/java/kr/wisestone/owl/service/UserLevelService.java
index 7b61e26..6d2f137 100644
--- a/src/main/java/kr/wisestone/owl/service/UserLevelService.java
+++ b/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);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/UserService.java b/src/main/java/kr/wisestone/owl/service/UserService.java
index 70af5fa..c36d4f1 100644
--- a/src/main/java/kr/wisestone/owl/service/UserService.java
+++ b/src/main/java/kr/wisestone/owl/service/UserService.java
@@ -80,5 +80,7 @@
 
     void updateLastLogin();
 
+    boolean useUserLevel(Long id);
+
     //ModelAndView downloadExcelEvent(Model model);
 }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
index d5c5fdf..8e35538 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
+++ b/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);
         }
 
diff --git a/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
index 07b26f1..760b213 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
+++ b/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
diff --git a/src/main/java/kr/wisestone/owl/vo/UserLevelVo.java b/src/main/java/kr/wisestone/owl/vo/UserLevelVo.java
index 2156ab2..9d8325b 100644
--- a/src/main/java/kr/wisestone/owl/vo/UserLevelVo.java
+++ b/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);
+    }
+
 }
diff --git a/src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java b/src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java
index 9f1c0c2..802cf45 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java
+++ b/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)
diff --git a/src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java b/src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java
index 3301980..047cdc1 100644
--- a/src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java
+++ b/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);
+    }
+
 }
diff --git a/src/main/resources/mybatis/query-template/user-template.xml b/src/main/resources/mybatis/query-template/user-template.xml
index 161cd1b..a1433b4 100644
--- a/src/main/resources/mybatis/query-template/user-template.xml
+++ b/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>
\ No newline at end of file
diff --git a/src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js b/src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js
index d16a436..0cb8031 100644
--- a/src/main/webapp/scripts/app/workspace/workspaceDepartmentConfig.controller.js
+++ b/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() {
diff --git a/src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js b/src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js
index a1a6f6d..7cd2fb2 100644
--- a/src/main/webapp/scripts/app/workspace/workspaceLevelAdd.controller.js
+++ b/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); // "李몄뿬 �긽�깭 蹂�寃� �떎�뙣"
+                        }
+                    });
+                }
             }
 
         ]);
diff --git a/src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js b/src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
index bf562b0..3f5130c 100644
--- a/src/main/webapp/scripts/app/workspace/workspaceUserConfig.controller.js
+++ b/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();
             }
         ]);
     }
diff --git a/src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js b/src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
index 827197b..12fae15 100644
--- a/src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
+++ b/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")
diff --git a/src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js b/src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js
index 2fb0d40..5c4c279 100644
--- a/src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js
+++ b/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);
diff --git a/src/main/webapp/views/workspace/workspaceDepartmentConfig.html b/src/main/webapp/views/workspace/workspaceDepartmentConfig.html
index 0433e7a..f47028f 100644
--- a/src/main/webapp/views/workspace/workspaceDepartmentConfig.html
+++ b/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>
 
diff --git a/src/main/webapp/views/workspace/workspaceLevelAdd.html b/src/main/webapp/views/workspace/workspaceLevelAdd.html
index d20524a..5e083e4 100644
--- a/src/main/webapp/views/workspace/workspaceLevelAdd.html
+++ b/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>
\ No newline at end of file

--
Gitblit v1.8.0