From 4e32eef25c59e29af3966345bb5e71c12a886865 Mon Sep 17 00:00:00 2001
From: wyu <kknd09321@nate.com>
Date: 화, 02 11월 2021 16:10:19 +0900
Subject: [PATCH] - 사용자 등급관리 테이블 및 조회 생성 - 부서 관리 테이블 생성

---
 src/main/java/kr/wisestone/owl/web/controller/UserWorkspaceController.java       |   26 -
 src/main/resources/migration/V1_10__Alter_Table.sql                              |   25 +
 src/main/resources/mybatis/query-template/userLevel-template.xml                 |   30 +
 src/main/java/kr/wisestone/owl/service/UserLevelService.java                     |   18 +
 src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js        |    2 
 src/main/java/kr/wisestone/owl/service/impl/DepartmentManagementServiceImpl.java |   29 +
 src/main/java/kr/wisestone/owl/vo/UserVo.java                                    |    8 
 src/main/java/kr/wisestone/owl/mapper/UserLevelMapper.java                       |   33 +
 src/main/java/kr/wisestone/owl/domain/DepartmentManagement.java                  |   46 ++
 src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java                       |   45 ++
 src/main/java/kr/wisestone/owl/domain/User.java                                  |   38 +
 src/main/java/kr/wisestone/owl/repository/UserLevelRepository.java               |    8 
 src/main/java/kr/wisestone/owl/web/condition/UserLevelCondition.java             |   63 +++
 src/main/java/kr/wisestone/owl/domain/UserLevel.java                             |   43 ++
 src/main/java/kr/wisestone/owl/web/condition/DepartmentManagementCondition.java  |   67 +++
 src/main/java/kr/wisestone/owl/web/condition/UserCondition.java                  |   16 
 src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java           |   99 +++++
 src/main/java/kr/wisestone/owl/service/DepartmentManagementService.java          |   10 
 src/main/resources/mybatis/query-template/userWorkspace-template.xml             |    2 
 src/main/java/kr/wisestone/owl/repository/DepartmentManagementRepository.java    |    8 
 src/main/resources/META-INF/orm.xml                                              |    4 
 src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java            |   78 ++++
 src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js     |    6 
 src/main/java/kr/wisestone/owl/mapper/DepartmentManagementMapper.java            |   33 +
 src/main/java/kr/wisestone/owl/vo/UserLevelVo.java                               |   48 ++
 src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java                 |   47 ++
 src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java                           |    8 
 src/main/java/kr/wisestone/owl/constant/Constants.java                           |    1 
 src/main/java/kr/wisestone/owl/vo/DepartmentManagementVo.java                    |   44 ++
 src/main/java/kr/wisestone/owl/constant/MngPermission.java                       |   15 
 src/main/java/kr/wisestone/owl/web/form/DepartmentManagementForm.java            |   45 ++
 src/main/java/kr/wisestone/owl/web/form/UserForm.java                            |   18 +
 src/main/java/kr/wisestone/owl/service/impl/ManageUserServiceImpl.java           |    2 
 33 files changed, 902 insertions(+), 63 deletions(-)

diff --git a/src/main/java/kr/wisestone/owl/constant/Constants.java b/src/main/java/kr/wisestone/owl/constant/Constants.java
index da9550e..3342dd0 100644
--- a/src/main/java/kr/wisestone/owl/constant/Constants.java
+++ b/src/main/java/kr/wisestone/owl/constant/Constants.java
@@ -13,4 +13,5 @@
     public static final String SESSION_ACCOUNT = "account";
     public static final String EXCEL = "excel";
     public static final String SESSION_EXPIRE_REDIRECT_URL = "/#/login";
+    public static final String ADMIN_MANAGER = "admin";
 }
diff --git a/src/main/java/kr/wisestone/owl/constant/MngPermission.java b/src/main/java/kr/wisestone/owl/constant/MngPermission.java
index 357ccaf..6531dd9 100644
--- a/src/main/java/kr/wisestone/owl/constant/MngPermission.java
+++ b/src/main/java/kr/wisestone/owl/constant/MngPermission.java
@@ -37,7 +37,7 @@
 
     public static int makeAllPermission()
     {
-        int nPermission = (USER_PERMISSION_MNG_WORKSPACE |
+        return (USER_PERMISSION_MNG_WORKSPACE |
                             USER_PERMISSION_MNG_PROJECT |
                           USER_PERMISSION_MNG_USER |
                 USER_PERMISSION_MNG_NOTICE |
@@ -46,18 +46,23 @@
                 USER_PERMISSION_MNG_EVENT |
                 USER_PERMISSION_MNG_GUIDE |
                 USER_PERMISSION_MNG_ISSUE_SETTING);
-
-        return nPermission;
     }
 
     public static int makeSubAllPermission()
     {
-        int nPermission = (/*USER_PERMISSION_MNG_WORKSPACE |*/
+        return  (/*USER_PERMISSION_MNG_WORKSPACE |*/
                 USER_PERMISSION_MNG_USER | USER_PERMISSION_MNG_NOTICE |
                 USER_PERMISSION_MNG_FAQ | USER_PERMISSION_MNG_QNA |
                 USER_PERMISSION_MNG_EVENT | USER_PERMISSION_MNG_GUIDE |
                         USER_PERMISSION_MNG_ISSUE_SETTING);
+    }
 
-        return nPermission;
+    // �씠�뒋 �떆�뒪�뀥 沅뚰븳 (�긽�깭, �썙�겕�뵆濡쒖슦, �궗�슜�옄 �젙�쓽 �븘�뱶, �씠�뒋�쑀�삎 �룷�븿)
+    public static int makeIssuePermission()
+    {
+        return  (USER_PERMISSION_MNG_ISSUE_STATUS |
+                USER_PERMISSION_MNG_WORKFLOW |
+                USER_PERMISSION_MNG_CUSTOME_FIELD |
+                USER_PERMISSION_MNG_ISSUE_TYPE);
     }
 }
diff --git a/src/main/java/kr/wisestone/owl/domain/DepartmentManagement.java b/src/main/java/kr/wisestone/owl/domain/DepartmentManagement.java
new file mode 100644
index 0000000..5586e9e
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/domain/DepartmentManagement.java
@@ -0,0 +1,46 @@
+package kr.wisestone.owl.domain;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+@Entity
+public class DepartmentManagement extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    private String departmentName;
+    private String departmentDescription;
+
+    public DepartmentManagement() {
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDepartmentName() {
+        return departmentName;
+    }
+
+    public void setDepartmentName(String departmentName) {
+        this.departmentName = departmentName;
+    }
+
+    public String getDepartmentDescription() {
+        return departmentDescription;
+    }
+
+    public void setDepartmentDescription(String departmentDescription) {
+        this.departmentDescription = departmentDescription;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/domain/User.java b/src/main/java/kr/wisestone/owl/domain/User.java
index a0e43bb..29b8f96 100644
--- a/src/main/java/kr/wisestone/owl/domain/User.java
+++ b/src/main/java/kr/wisestone/owl/domain/User.java
@@ -30,6 +30,7 @@
     private String phone;
     private String profile;
     private String awsKey;
+//    private Long departmentId;
     @Enumerated(EnumType.STRING)
     private SocialType socialType;
     private Long lastWorkspaceId;
@@ -37,7 +38,6 @@
     private Date lastLoginDate;
     private String reservationNotifyTime;   //  �씠硫붿씪 �븣由� �떆媛� �삁�젙
     private String language;
-    private Integer permission;
     private String licensekey;
 
     @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true)
@@ -61,6 +61,15 @@
     @OneToMany(mappedBy = "user", cascade = {CascadeType.ALL}, orphanRemoval = true)
     private Set<IssueTableConfig> issueTableConfigs = new HashSet<>();
 
+    @ManyToOne(targetEntity = UserLevel.class, fetch = FetchType.LAZY)
+    @JoinColumn(name="level_id")
+    private UserLevel userLevel;
+
+    @ManyToOne(targetEntity = DepartmentManagement.class, fetch = FetchType.LAZY)
+    @JoinColumn(name="department_id")
+    private DepartmentManagement departmentManagement;
+
+
     public User() {
     }
 
@@ -69,6 +78,23 @@
         this.name = name;
         this.account = account;
     }
+
+    public DepartmentManagement getDepartmentId() {
+        return departmentManagement;
+    }
+
+    public void setDepartmentId(DepartmentManagement department) {
+        this.departmentManagement = department;
+    }
+
+    public UserLevel getUserLevel() {
+        return userLevel;
+    }
+
+    public void setUserLevel(UserLevel userLevel) {
+        this.userLevel = userLevel;
+    }
+
 
     public Long getId() {
         return id;
@@ -279,13 +305,15 @@
         this.language = language;
     }
 
+
     public Integer getPermission() {
-        return permission;
+        return this.userLevel.getPermission();
     }
 
-    public void setPermission(Integer permission) {
-        this.permission = permission;
-    }
+    // TEST
+    //public void setPermission(Integer permission) {
+    //    this.userLevel.setPermission(permission);
+    //}
 
     public String getLicensekey() {
         return licensekey;
diff --git a/src/main/java/kr/wisestone/owl/domain/UserLevel.java b/src/main/java/kr/wisestone/owl/domain/UserLevel.java
new file mode 100644
index 0000000..4097324
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/domain/UserLevel.java
@@ -0,0 +1,43 @@
+package kr.wisestone.owl.domain;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+public class UserLevel extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    private String levelName;
+    private Integer permission;
+
+    public UserLevel() {
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public Integer getPermission() {
+        return permission;
+    }
+
+    public void setPermission(Integer permission) {
+        this.permission = permission;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/mapper/DepartmentManagementMapper.java b/src/main/java/kr/wisestone/owl/mapper/DepartmentManagementMapper.java
new file mode 100644
index 0000000..031886a
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/mapper/DepartmentManagementMapper.java
@@ -0,0 +1,33 @@
+package kr.wisestone.owl.mapper;
+
+import kr.wisestone.owl.web.condition.DepartmentManagementCondition;
+import kr.wisestone.owl.web.condition.DepartmentManagementCondition;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by wisestone on 2018-02-26.
+ */
+@Repository
+public interface DepartmentManagementMapper {
+    List<Map<String, Object>> find(DepartmentManagementCondition departmentManagementCondition);
+
+    List<Map<String, Object>> findAdmin();
+
+    List<Map<String, Object>> findProjectMember(DepartmentManagementCondition DepartmentManagementCondition);
+
+    Long count(DepartmentManagementCondition DepartmentManagementCondition);
+
+    void deleteCascadeUser(DepartmentManagementCondition DepartmentManagementCondition);
+
+    List<Map<String, Object>> findByReservationNotifyTime(Map<String, Object> conditions);
+
+    List<Map<String, Object>> findByAllWorkspace(DepartmentManagementCondition DepartmentManagementCondition);
+
+    Long countByAllWorkspace(DepartmentManagementCondition DepartmentManagementCondition);
+
+    List<Map<String, Object>> findEvent();
+
+}
diff --git a/src/main/java/kr/wisestone/owl/mapper/UserLevelMapper.java b/src/main/java/kr/wisestone/owl/mapper/UserLevelMapper.java
new file mode 100644
index 0000000..81c3ccd
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/mapper/UserLevelMapper.java
@@ -0,0 +1,33 @@
+package kr.wisestone.owl.mapper;
+
+import kr.wisestone.owl.web.condition.UserCondition;
+import kr.wisestone.owl.web.condition.UserLevelCondition;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by wisestone on 2018-02-26.
+ */
+@Repository
+public interface UserLevelMapper {
+    List<Map<String, Object>> find(UserLevelCondition userLevelCondition);
+
+    List<Map<String, Object>> findAdmin();
+
+    List<Map<String, Object>> findProjectMember(UserLevelCondition userLevelCondition);
+
+    Long count(UserLevelCondition userLevelCondition);
+
+    void deleteCascadeUser(UserLevelCondition userLevelCondition);
+
+    List<Map<String, Object>> findByReservationNotifyTime(Map<String, Object> conditions);
+
+    List<Map<String, Object>> findByAllWorkspace(UserLevelCondition userLevelCondition);
+
+    Long countByAllWorkspace(UserLevelCondition userLevelCondition);
+
+    List<Map<String, Object>> findEvent();
+
+}
diff --git a/src/main/java/kr/wisestone/owl/repository/DepartmentManagementRepository.java b/src/main/java/kr/wisestone/owl/repository/DepartmentManagementRepository.java
new file mode 100644
index 0000000..eef1247
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/repository/DepartmentManagementRepository.java
@@ -0,0 +1,8 @@
+package kr.wisestone.owl.repository;
+
+import kr.wisestone.owl.domain.DepartmentManagement;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface DepartmentManagementRepository extends JpaRepository<DepartmentManagement, Long> {
+
+}
diff --git a/src/main/java/kr/wisestone/owl/repository/UserLevelRepository.java b/src/main/java/kr/wisestone/owl/repository/UserLevelRepository.java
new file mode 100644
index 0000000..4e3e6fd
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/repository/UserLevelRepository.java
@@ -0,0 +1,8 @@
+package kr.wisestone.owl.repository;
+
+import kr.wisestone.owl.domain.UserLevel;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface UserLevelRepository extends JpaRepository<UserLevel, Long> {
+
+}
diff --git a/src/main/java/kr/wisestone/owl/service/DepartmentManagementService.java b/src/main/java/kr/wisestone/owl/service/DepartmentManagementService.java
new file mode 100644
index 0000000..ac9a13b
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/service/DepartmentManagementService.java
@@ -0,0 +1,10 @@
+package kr.wisestone.owl.service;
+
+import kr.wisestone.owl.domain.DepartmentManagement;
+import kr.wisestone.owl.web.form.DepartmentManagementForm;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface DepartmentManagementService extends AbstractService<DepartmentManagement, Long, JpaRepository<DepartmentManagement, Long>> {
+    DepartmentManagement addDepartment(DepartmentManagementForm departmentManagementForm);
+
+}
diff --git a/src/main/java/kr/wisestone/owl/service/UserLevelService.java b/src/main/java/kr/wisestone/owl/service/UserLevelService.java
new file mode 100644
index 0000000..7b61e26
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/service/UserLevelService.java
@@ -0,0 +1,18 @@
+package kr.wisestone.owl.service;
+
+import kr.wisestone.owl.domain.UserLevel;
+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.UserLevelForm;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+import java.util.Map;
+
+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);
+}
diff --git a/src/main/java/kr/wisestone/owl/service/impl/DepartmentManagementServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/DepartmentManagementServiceImpl.java
new file mode 100644
index 0000000..f049487
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/service/impl/DepartmentManagementServiceImpl.java
@@ -0,0 +1,29 @@
+package kr.wisestone.owl.service.impl;
+
+import kr.wisestone.owl.domain.DepartmentManagement;
+import kr.wisestone.owl.repository.DepartmentManagementRepository;
+import kr.wisestone.owl.service.DepartmentManagementService;
+import kr.wisestone.owl.util.ConvertUtil;
+import kr.wisestone.owl.web.form.DepartmentManagementForm;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DepartmentManagementServiceImpl extends AbstractServiceImpl<DepartmentManagement, Long, JpaRepository<DepartmentManagement, Long>> implements DepartmentManagementService {
+
+    @Autowired
+    private DepartmentManagementRepository departmentManagementRepository;
+
+    @Override
+    protected JpaRepository<DepartmentManagement, Long> getRepository() {
+        return this.departmentManagementRepository;
+    }
+
+    @Override
+    public DepartmentManagement addDepartment(DepartmentManagementForm departmentManagementForm) {
+        DepartmentManagement departmentManagement = ConvertUtil.copyProperties(departmentManagementForm, DepartmentManagement.class);
+        departmentManagementRepository.saveAndFlush(departmentManagement);
+        return departmentManagement;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/service/impl/ManageUserServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/ManageUserServiceImpl.java
index 905bf06..91cf560 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/ManageUserServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/ManageUserServiceImpl.java
@@ -106,7 +106,7 @@
         newPermission |= MngPermission.makePermission(manageUserForm.getPermGuide(), MngPermission.USER_PERMISSION_MNG_GUIDE);
 
         User user = userService.getUser(manageUserForm.getUserId());
-        user.setPermission(newPermission);
+/*        user.setPermission(newPermission);*/
 
         this.userRepository.saveAndFlush(user);
     }
diff --git a/src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java b/src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
new file mode 100644
index 0000000..d5c5fdf
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/service/impl/UserLevelServiceImpl.java
@@ -0,0 +1,78 @@
+package kr.wisestone.owl.service.impl;
+
+import com.google.common.collect.Lists;
+import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.domain.UserLevel;
+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.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.web.condition.UserCondition;
+import kr.wisestone.owl.web.condition.UserLevelCondition;
+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 java.util.List;
+import java.util.Map;
+
+@Service
+public class UserLevelServiceImpl extends AbstractServiceImpl<UserLevel, Long, JpaRepository<UserLevel, Long>> implements UserLevelService {
+
+    @Autowired
+    private UserLevelRepository userLevelRepository;
+
+    @Autowired
+    private UserLevelMapper userLevelMapper;
+
+    @Override
+    protected JpaRepository<UserLevel, Long> getRepository() {
+        return this.userLevelRepository;
+    }
+
+    @Override
+    public UserLevel addUserLevel(UserLevelForm userLevelForm) {
+        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) {
+
+        condition.setPage(pageable.getPageNumber() * pageable.getPageSize());
+        condition.setPageSize(pageable.getPageSize());
+
+        List<Map<String, Object>> results = this.userLevelMapper.find(condition);
+        Long totalUsersCount = this.userLevelMapper.count(condition);
+
+        return this.convertUserLevelVoToMap(results, totalUsersCount, pageable, resJsonData);
+    }
+
+    //  寃��깋 寃곌낵瑜� UserLevelVo 濡� 蹂��솚�븳�떎.
+    private List<UserLevelVo> convertUserLevelVoToMap(List<Map<String, Object>> results, Long totalUsersCount, Pageable pageable, Map<String, Object> resJsonData) {
+        List<UserLevelVo> userLevelVos = Lists.newArrayList();
+
+        for (Map<String, Object> result : results) {
+            UserLevelVo userLevelVo = ConvertUtil.convertMapToClass(result, UserLevelVo.class);
+            userLevelVos.add(userLevelVo);
+        }
+
+        int totalPage = (int) Math.ceil((totalUsersCount - 1) / pageable.getPageSize()) + 1;
+
+        resJsonData.put(Constants.RES_KEY_CONTENTS, userLevelVos);
+        resJsonData.put(Constants.REQ_KEY_PAGE_VO, new ResPage(pageable.getPageNumber(), pageable.getPageSize(),
+                totalPage, totalUsersCount));
+
+        return userLevelVos;
+    }
+
+}
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 bf2204e..07b26f1 100644
--- a/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
+++ b/src/main/java/kr/wisestone/owl/service/impl/UserServiceImpl.java
@@ -17,7 +17,9 @@
 import kr.wisestone.owl.util.*;
 import kr.wisestone.owl.vo.*;
 import kr.wisestone.owl.web.condition.UserCondition;
+import kr.wisestone.owl.web.form.DepartmentManagementForm;
 import kr.wisestone.owl.web.form.UserForm;
+import kr.wisestone.owl.web.form.UserLevelForm;
 import kr.wisestone.owl.web.view.ExcelView;
 import org.apache.commons.validator.routines.EmailValidator;
 import org.slf4j.Logger;
@@ -32,6 +34,7 @@
 import org.springframework.security.core.session.SessionRegistry;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Repository;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.Model;
@@ -53,6 +56,12 @@
 
     @Autowired
     private UserRepository userRepository;
+
+    @Autowired
+    private UserLevelService userLevelService;
+
+    @Autowired
+    private DepartmentManagementService departmentManagementService;
 
     @Autowired
     private SystemRoleService systemRoleService;
@@ -197,7 +206,8 @@
         user.setAccount(CommonUtil.encryptAES128(userForm.getAccount()));
         user.setPassword(this.passwordEncoder.encode(user.getPassword()));
 
-        this.userRepository.saveAndFlush(user);
+        //this.userLevelRepository.saveAndFlush(user);
+        //userLevelRepository.saveAndFlush(user);
 
         //  �봽濡쒗븘 �뙆�씪�씠 �쑀�슚�븳吏� 泥댄겕�븳�떎.
         this.verifyProfile(profile);
@@ -217,11 +227,30 @@
 
             this.userInviteService.includePrimaryWorkspace(user, primaryWorkspace);
 
+
+
             // edit by zenith for permission at 20200803
-            user.setPermission(MngPermission.USER_PERMISSION_MNG_NONE);
+            /*user.setPermission(MngPermission.USER_PERMISSION_MNG_NONE);*/
 
         } 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);
+            user.setUserLevel(userLevel);
+
+            // DepartmentManagement�뿉 �엫�떆濡� Name, Description 媛� 異붽�
+            DepartmentManagementForm departmentManagementForm = new DepartmentManagementForm();
+
+            departmentManagementForm.setDepartmentName("媛쒕컻��");
+            departmentManagementForm.setDepartmentDescription("�쎒�궗�씠�듃 諛� �빋 �꽌鍮꾩뒪 媛쒕컻");
+            DepartmentManagement departmentManagement = this.departmentManagementService.addDepartment(departmentManagementForm);
+            user.setDepartmentId(departmentManagement);
 
             if(primaryWorkspace == null || primaryWorkspace.getName() != userForm.getWorkspaceName()) {
                 //  �뾽臾� 怨듦컙瑜� �깮�꽦�븳�떎. 媛��엯�븳 �궗�슜�옄�뒗 �뾽臾� 怨듦컙�쓽 二쇱씤�씠�떎.
@@ -234,18 +263,17 @@
                 user.setLastWorkspaceId(workspace.getId());
 
                 // edit by zenith for permission at 20200803
-                user.setPermission(MngPermission.makeAllPermission());
+                //user.setPermission(MngPermission.makeAllPermission());
             } else  {
                 this.userInviteService.includePrimaryWorkspace(user, primaryWorkspace);
                 user.setLastWorkspaceId(primaryWorkspace.getId());
-
-                user.setPermission(MngPermission.makeSubAllPermission());
+                /*user.setPermission(MngPermission.makeSubAllPermission());*/
             }
         }
+        this.userRepository.saveAndFlush(user);
 
         //  �씠硫붿씪 �븣由� �삁�젙 �떆媛꾩씠 怨듬갚�씠硫� �뵒�뤃�듃 �씠硫붿씪 �븣由� �삁�젙 �떆媛꾩쑝濡� �꽕�젙�븳�떎.
         user.setReservationNotifyTime(User.DEFAULT_RESERVATION_NOTIFY_TIME);
-        this.userRepository.saveAndFlush(user);
 
         //  珥덈�諛쏆� 硫붿씪�씠 �엳�뒗 �궗�슜�옄媛� 媛��엯�뻽�쑝硫� 珥덈��뻽�쓣 �븣 �꽑�깮�븳 �봽濡쒖젥�듃�뿉 李몄뿬 �떆�궓�떎.
         this.userInviteService.checkInviteUser(user);
@@ -1005,7 +1033,7 @@
         this.userRepository.saveAndFlush(user);
     }
 
-        //  留덉�留됱쑝濡� �꽑�깮�븳 �봽濡쒖젥�듃 �젙蹂대�� ���옣�븳�떎.
+    //  留덉�留됱쑝濡� �꽑�깮�븳 �봽濡쒖젥�듃 �젙蹂대�� ���옣�븳�떎.
     @Override
     @Transactional
     public void updateLastProject(Map<String, Object> resJsonData, UserForm userForm) {
@@ -1150,6 +1178,7 @@
         }
     }
 
+
     //  �뾽臾� 怨듦컙�뿉�꽌 �젣�쇅�릺嫄곕굹 �뾽臾� 怨듦컙 �궘�젣�떆 李몄뿬 �궗�슜�옄�뱾�쓽 留덉�留� �젒洹� �뾽臾� 怨듦컙 �젙蹂대줈 �꽭�뀡 �뾽�뜲�씠�듃�븯湲� �쐞�빐 �궗�슜
     @Override
     @Transactional(readOnly = true)
@@ -1164,7 +1193,9 @@
     @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");
+        UserVo userVo = ConvertUtil.copyProperties(user, UserVo.class, "password", "permission");
+        // user�뿉�꽌 Permission 媛믪쓣 媛��졇���꽌 userVo �뿉 setPermission �븿
+        userVo.setPermission(user.getPermission());
         userVo.setAccount(CommonUtil.decryptAES128(userVo.getAccount()));
         resJsonData.put(Constants.RES_KEY_CONTENTS, userVo);
         //  �궗�슜�옄 �꽭�뀡 �젙蹂대�� 遺꾩꽍�빐�꽌 濡쒓렇�뿉 �궓湲대떎.
diff --git a/src/main/java/kr/wisestone/owl/vo/DepartmentManagementVo.java b/src/main/java/kr/wisestone/owl/vo/DepartmentManagementVo.java
new file mode 100644
index 0000000..3099ac0
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/vo/DepartmentManagementVo.java
@@ -0,0 +1,44 @@
+package kr.wisestone.owl.vo;
+
+/**
+ * Created by jeong on 2017-08-02.
+ */
+public class DepartmentManagementVo extends BaseVo{
+
+    private Long id;
+    private String departmentName;
+    private String departmentDescription;
+
+    public DepartmentManagementVo() {
+    }
+
+    public DepartmentManagementVo(Long id, String departmentName, String departmentDescription) {
+        this.id = id;
+        this.departmentName = departmentName;
+        this.departmentDescription = departmentDescription;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDepartmentName() {
+        return departmentName;
+    }
+
+    public void setDepartmentName(String departmentName) {
+        this.departmentName = departmentName;
+    }
+
+    public String getDepartmentDescription() {
+        return departmentDescription;
+    }
+
+    public void setDepartmentDescription(String departmentDescription) {
+        this.departmentDescription = departmentDescription;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/vo/UserLevelVo.java b/src/main/java/kr/wisestone/owl/vo/UserLevelVo.java
new file mode 100644
index 0000000..2156ab2
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/vo/UserLevelVo.java
@@ -0,0 +1,48 @@
+package kr.wisestone.owl.vo;
+
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+/**
+ * Created by jeong on 2017-08-02.
+ */
+public class UserLevelVo extends BaseVo{
+
+    private Long id;
+    private String levelName;
+    private Integer permission;
+
+    public UserLevelVo() {
+    }
+
+    public UserLevelVo(Long id, String levelname, Integer permission) {
+        this.id = id;
+        this.levelName = levelname;
+        this.permission = permission;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public Integer getPermission() {
+        return permission;
+    }
+
+    public void setPermission(Integer permission) {
+        this.permission = permission;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/vo/UserVo.java b/src/main/java/kr/wisestone/owl/vo/UserVo.java
index eb0fea6..71bf358 100644
--- a/src/main/java/kr/wisestone/owl/vo/UserVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/UserVo.java
@@ -20,6 +20,7 @@
     private String socialType;
     private Long lastWorkspaceId;
     private Long lastProjectId;
+    private Long departmentId;
     private Boolean userSocialLogin = Boolean.FALSE;
     private List<ProjectVo> projectVos = Lists.newArrayList();
     private String reservationNotifyTime;
@@ -47,6 +48,13 @@
         this.phone = phone;
     }
 
+    public Long getDepartmentId() {
+        return departmentId;
+    }
+
+    public void setDepartmentId(Long departmentId) {
+        this.departmentId = departmentId;
+    }
     public Long getId() {
         return id;
     }
diff --git a/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java b/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
index 0c42a64..d6281a3 100644
--- a/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
+++ b/src/main/java/kr/wisestone/owl/vo/UserWorkspaceVo.java
@@ -7,7 +7,7 @@
     private Long id;
     private String userName;
     private String account;
-    private Integer premission;
+    private Integer permission;
     private Boolean useYn;
 
     public UserWorkspaceVo(){}
@@ -37,11 +37,11 @@
     }
 
     public Integer getPermission() {
-        return premission;
+        return permission;
     }
 
-    public void setPermission(Integer premission) {
-        this.premission = premission;
+    public void setPermission(Integer permission) {
+        this.permission = permission;
     }
 
     public Boolean getUseYn() {
diff --git a/src/main/java/kr/wisestone/owl/web/condition/DepartmentManagementCondition.java b/src/main/java/kr/wisestone/owl/web/condition/DepartmentManagementCondition.java
new file mode 100644
index 0000000..17e3da5
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/web/condition/DepartmentManagementCondition.java
@@ -0,0 +1,67 @@
+package kr.wisestone.owl.web.condition;
+
+import com.google.common.collect.Lists;
+import kr.wisestone.owl.util.ConvertUtil;
+import kr.wisestone.owl.util.MapUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by jeong on 2018-01-01.
+ */
+public class DepartmentManagementCondition {
+    private Long id;
+    private String departmentName;
+    private String  departmentDescription;
+    private List<String> statuses = Lists.newArrayList();
+    private List<Long> excludeIds = Lists.newArrayList();
+
+    public static DepartmentManagementCondition make(Map<String, Object> departmentManagemantconditions) {
+        DepartmentManagementCondition departmentManagementCondition = ConvertUtil.convertMapToClass(departmentManagemantconditions, DepartmentManagementCondition.class);
+        departmentManagementCondition.setStatuses(MapUtil.getStrings(departmentManagemantconditions, "statuses"));
+        departmentManagementCondition.setExcludeIds(MapUtil.getLongs(departmentManagemantconditions, "excludeIds"));
+
+        return departmentManagementCondition;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDepartmentName() {
+        return departmentName;
+    }
+
+    public void setDepartmentName(String departmentName) {
+        this.departmentName = departmentName;
+    }
+
+    public String getDepartmentDescription() {
+        return departmentDescription;
+    }
+
+    public void setDepartmentDescription(String departmentDescription) {
+        this.departmentDescription = departmentDescription;
+    }
+
+    public List<String> getStatuses() {
+        return statuses;
+    }
+
+    public void setStatuses(List<String> statuses) {
+        this.statuses = statuses;
+    }
+
+    public List<Long> getExcludeIds() {
+        return excludeIds;
+    }
+
+    public void setExcludeIds(List<Long> excludeIds) {
+        this.excludeIds = excludeIds;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/web/condition/UserCondition.java b/src/main/java/kr/wisestone/owl/web/condition/UserCondition.java
index 2be9a16..04f3c24 100644
--- a/src/main/java/kr/wisestone/owl/web/condition/UserCondition.java
+++ b/src/main/java/kr/wisestone/owl/web/condition/UserCondition.java
@@ -25,7 +25,7 @@
     private Integer pageSize;
     private Long loginUserId;
     private Long workspaceId;
-    private Integer permission;
+//    private Integer permission;
     private String licensekey;
 
     public static UserCondition make(Map<String, Object> conditions) {
@@ -144,13 +144,13 @@
         this.deep = deep;
     }
 
-    public Integer getPermission() {
-        return permission;
-    }
-
-    public void setPermission(Integer permission) {
-        this.permission = permission;
-    }
+//    public Integer getPermission() {
+//        return permission;
+//    }
+//
+//    public void setPermission(Integer permission) {
+//        this.permission = permission;
+//    }
 
     public String getLicensekey() {
         return licensekey;
diff --git a/src/main/java/kr/wisestone/owl/web/condition/UserLevelCondition.java b/src/main/java/kr/wisestone/owl/web/condition/UserLevelCondition.java
new file mode 100644
index 0000000..5ed07f0
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/web/condition/UserLevelCondition.java
@@ -0,0 +1,63 @@
+package kr.wisestone.owl.web.condition;
+
+import com.google.common.collect.Lists;
+import kr.wisestone.owl.util.ConvertUtil;
+import kr.wisestone.owl.util.MapUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by jeong on 2018-01-01.
+ */
+public class UserLevelCondition {
+    private Long id;
+    private String levelName;
+    private Integer permission;
+    private Integer page;
+    private Integer pageSize;
+
+    public static UserLevelCondition make(Map<String, Object> userLevelConditions) {
+        return ConvertUtil.convertMapToClass(userLevelConditions, UserLevelCondition.class);
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public Integer getPermission() {
+        return permission;
+    }
+
+    public void setPermission(Integer permission) {
+        this.permission = permission;
+    }
+
+    public Integer getPage() {
+        return page;
+    }
+
+    public void setPage(Integer page) {
+        this.page = page;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java b/src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java
new file mode 100644
index 0000000..9f1c0c2
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/web/controller/UserLevelController.java
@@ -0,0 +1,99 @@
+package kr.wisestone.owl.web.controller;
+
+import kr.wisestone.owl.constant.Constants;
+import kr.wisestone.owl.domain.enumType.SocialType;
+import kr.wisestone.owl.service.UserLevelService;
+import kr.wisestone.owl.service.UserService;
+import kr.wisestone.owl.util.ConvertUtil;
+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.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Pageable;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by jeong on 2017-08-02.
+ */
+@Controller
+public class UserLevelController extends BaseController {
+
+    @Autowired
+    private UserLevelService userLevelService;
+
+    //  �궗�슜�옄�벑湲� �깮�꽦
+    @RequestMapping(value = "/userLevel/add", method = RequestMethod.POST)
+    public
+    @ResponseBody
+    Map<String, Object> addUserLevel(MultipartHttpServletRequest request) {
+        Map<String, Object> resJsonData = new HashMap<>();
+        Map<String, Object> content = ConvertUtil.convertJsonToMap(request.getParameter(Constants.REQ_KEY_CONTENT));
+        this.userLevelService.addUserLevel(UserLevelForm.make(content));
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
+    //  �궗�슜�옄�벑湲� 議고쉶
+    @RequestMapping(value = "/userLevel/find", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
+    public
+    @ResponseBody
+    Map<String, Object> find(@RequestBody Map<String, Map<String, Object>> params) {
+        Map<String, Object> resJsonData = new HashMap<>();
+        Pageable pageable = this.pageUtil.convertPageable(this.getPageVo(params));
+
+        this.userLevelService.findUser(resJsonData, UserLevelCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
+
+        return this.setSuccessMessage(resJsonData);
+    }
+
+    //  �궗�슜�옄�벑湲� �닔�젙
+//    @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/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/downloadExcel", method = RequestMethod.POST)
+//    public ModelAndView downloadExcel(HttpServletRequest request, Model model) {
+//        return this.userService.downloadExcel(model);
+//    }
+
+    /*//  �씠踰ㅽ듃 �떦泥⑥옄 �뿊�� �떎�슫濡쒕뱶
+    @RequestMapping(value = "/user/downloadExcelEvent", method = RequestMethod.POST)
+    public ModelAndView downloadExcelEvent(HttpServletRequest request, Model model) {
+        return this.userService.downloadExcelEvent(model);
+    }*/
+}
+
+
+
+
+
diff --git a/src/main/java/kr/wisestone/owl/web/controller/UserWorkspaceController.java b/src/main/java/kr/wisestone/owl/web/controller/UserWorkspaceController.java
index c226690..fc19000 100644
--- a/src/main/java/kr/wisestone/owl/web/controller/UserWorkspaceController.java
+++ b/src/main/java/kr/wisestone/owl/web/controller/UserWorkspaceController.java
@@ -26,32 +26,6 @@
     @Autowired
     private UserWorkspaceService userWorkspaceService;
 
-    //  �궗�슜�옄 �벑湲� 議고쉶
-    @RequestMapping(value = "/userWorkspace/levelFind", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
-    public
-    @ResponseBody
-    Map<String, Object> levelFind(@RequestBody Map<String, Map<String, Object>> params) {
-        Map<String, Object> resJsonData = new HashMap<>();
-        Pageable pageable = this.pageUtil.convertPageable(this.getPageVo(params));
-
-        this.userWorkspaceService.findUserWorkspace(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
-        //this.userWorkspaceService.levelFind(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
-        return this.setSuccessMessage(resJsonData);
-    }
-
-    //  遺��꽌 議고쉶
-    @RequestMapping(value = "/userWorkspace/departmentFind", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
-    public
-    @ResponseBody
-    Map<String, Object> departmentFind(@RequestBody Map<String, Map<String, Object>> params) {
-        Map<String, Object> resJsonData = new HashMap<>();
-        Pageable pageable = this.pageUtil.convertPageable(this.getPageVo(params));
-
-        this.userWorkspaceService.findUserWorkspace(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
-        //this.userWorkspaceService.departmentFind(resJsonData, UserWorkspaceCondition.make(params.get(Constants.REQ_KEY_CONTENT)), pageable);
-        return this.setSuccessMessage(resJsonData);
-    }
-
     //  �뾽臾닿났媛꾩뿉 李몄뿬�븯�뒗 �궗�슜�옄 議고쉶
     @RequestMapping(value = "/userWorkspace/find", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
     public
diff --git a/src/main/java/kr/wisestone/owl/web/form/DepartmentManagementForm.java b/src/main/java/kr/wisestone/owl/web/form/DepartmentManagementForm.java
new file mode 100644
index 0000000..6f9a6f4
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/web/form/DepartmentManagementForm.java
@@ -0,0 +1,45 @@
+package kr.wisestone.owl.web.form;
+
+import kr.wisestone.owl.util.ConvertUtil;
+
+import java.util.Map;
+
+/**
+ * Created by jeong on 2017-12-30.
+ */
+public class DepartmentManagementForm {
+    private Long id;
+    private String departmentName;
+    private String departmentDescription;
+
+    public DepartmentManagementForm() {
+    }
+
+    public static DepartmentManagementForm make(Map<String, Object> params) {
+        return ConvertUtil.convertMapToClass(params, DepartmentManagementForm.class);
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getDepartmentName() {
+        return departmentName;
+    }
+
+    public void setDepartmentName(String departmentName) {
+        this.departmentName = departmentName;
+    }
+
+    public String getDepartmentDescription() {
+        return departmentDescription;
+    }
+
+    public void setDepartmentDescription(String departmentDescription) {
+        this.departmentDescription = departmentDescription;
+    }
+}
diff --git a/src/main/java/kr/wisestone/owl/web/form/UserForm.java b/src/main/java/kr/wisestone/owl/web/form/UserForm.java
index 938513c..06d0a08 100644
--- a/src/main/java/kr/wisestone/owl/web/form/UserForm.java
+++ b/src/main/java/kr/wisestone/owl/web/form/UserForm.java
@@ -17,6 +17,8 @@
     private String profile;
     private String status;
     private String phone;
+    private Long levelId;
+    private String departmentId;
     private String workspaceName;
     private String socialType;
     private Long lastWorkspaceId;
@@ -91,6 +93,22 @@
         return phone;
     }
 
+    public Long getLevelId() {
+        return levelId;
+    }
+
+    public void setLevelId(Long levelId) {
+        this.levelId = levelId;
+    }
+
+    public String getDepartmentId() {
+        return departmentId;
+    }
+
+    public void setDepartmentId(String departmentId) {
+        this.departmentId = departmentId;
+    }
+
     public void setPhone(String phone) {
         this.phone = phone;
     }
diff --git a/src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java b/src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java
new file mode 100644
index 0000000..3301980
--- /dev/null
+++ b/src/main/java/kr/wisestone/owl/web/form/UserLevelForm.java
@@ -0,0 +1,45 @@
+package kr.wisestone.owl.web.form;
+
+import kr.wisestone.owl.domain.User;
+import kr.wisestone.owl.util.ConvertUtil;
+
+import java.util.Map;
+
+/**
+ * Created by jeong on 2017-12-30.
+ */
+public class UserLevelForm {
+    private Long id;
+    private String levelName;
+    private Integer permission;
+
+    public UserLevelForm(){}
+
+    public static UserLevelForm make(Map<String, Object> params) {
+        return ConvertUtil.convertMapToClass(params, UserLevelForm.class);
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public Integer getPermission() {
+        return permission;
+    }
+
+    public void setPermission(Integer permission) {
+        this.permission = permission;
+    }
+}
diff --git a/src/main/resources/META-INF/orm.xml b/src/main/resources/META-INF/orm.xml
index 0fb4ead..6a31acf 100644
--- a/src/main/resources/META-INF/orm.xml
+++ b/src/main/resources/META-INF/orm.xml
@@ -42,7 +42,9 @@
         <query>
             SELECT u
             FROM User u
-            WHERE u.permission > 2047
+            INNER JOIN u.userLevel ul
+            INNER JOIN u.departmentManagement dm
+            WHERE ul.permission > 2047
             AND u.status = '01'
         </query>
     </named-query>
diff --git a/src/main/resources/migration/V1_10__Alter_Table.sql b/src/main/resources/migration/V1_10__Alter_Table.sql
new file mode 100644
index 0000000..dedf1fe
--- /dev/null
+++ b/src/main/resources/migration/V1_10__Alter_Table.sql
@@ -0,0 +1,25 @@
+ALTER TABLE `user` DROP COLUMN `permission`;
+ALTER TABLE `user` ADD COLUMN  `level_id` BIGINT(11) NULL;
+ALTER TABLE `user` ADD COLUMN  `department_id` BIGINT(11) NULL;
+
+CREATE TABLE `department_management`(
+    `id` BIGINT(11) AUTO_INCREMENT,
+    `department_name` VARCHAR(50) NOT NULL,
+    `department_description` VARCHAR(255) NOT NULL,
+    `register_id` BIGINT(20) NOT NULL,
+    `register_date` TIMESTAMP NULL,
+    `modify_id` BIGINT(20) NOT NULL,
+    `modify_date` TIMESTAMP NULL,
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+
+CREATE TABLE `user_level`(
+    `id` BIGINT(11) AUTO_INCREMENT,
+    `level_name` VARCHAR(50)  NOT NULL,
+    `permission` INT NULL,
+    `register_id` BIGINT(20) NOT NULL COMMENT 'register_id',
+    `register_date` TIMESTAMP NULL COMMENT 'register_date',
+    `modify_id` BIGINT(20) NOT NULL COMMENT 'modify_id',
+    `modify_date` TIMESTAMP NULL COMMENT 'modify_date',
+    PRIMARY KEY (`id`) USING btree
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
\ No newline at end of file
diff --git a/src/main/resources/mybatis/query-template/userLevel-template.xml b/src/main/resources/mybatis/query-template/userLevel-template.xml
new file mode 100644
index 0000000..61ede06
--- /dev/null
+++ b/src/main/resources/mybatis/query-template/userLevel-template.xml
@@ -0,0 +1,30 @@
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="kr.wisestone.owl.mapper.UserLevelMapper">
+
+    <select id="find" resultType="java.util.HashMap" parameterType="kr.wisestone.owl.web.condition.UserLevelCondition">
+        SELECT
+        ul.id as id,
+        ul.level_name as levelName,
+        ul.permission as permission
+        FROM
+        user_level ul
+        WHERE 1=1
+        <if test="levelName != '' and levelName != null">
+            AND ul.level_name like CONCAT('%',#{levelName},'%')
+        </if>
+        limit #{pageSize} offset #{page};
+    </select>
+
+    <select id="count" resultType="java.lang.Long" parameterType="kr.wisestone.owl.web.condition.UserLevelCondition">
+        SELECT
+        count(ul.id)
+        FROM
+        user_level ul
+        WHERE 1=1
+        <if test="levelName != '' and levelName != null">
+            AND ul.level_name like CONCAT('%',#{levelName},'%')
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mybatis/query-template/userWorkspace-template.xml b/src/main/resources/mybatis/query-template/userWorkspace-template.xml
index 402aff6..0b89246 100644
--- a/src/main/resources/mybatis/query-template/userWorkspace-template.xml
+++ b/src/main/resources/mybatis/query-template/userWorkspace-template.xml
@@ -9,7 +9,7 @@
         u.id as userId,
         u.name as userName,
         u.account as account,
-        u.permission as permission,
+        /*u.permission as permission,*/
         CASE WHEN uw.use_yn = 'Y' THEN 'true' ELSE 'false' END as useYn
         FROM
         user_workspace uw
diff --git a/src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js b/src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
index 4a8a351..f78008e 100644
--- a/src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
+++ b/src/main/webapp/scripts/app/workspace/workspaceUserLevelConfig.controller.js
@@ -87,7 +87,7 @@
                     $scope.vm.tableConfigs.push($tableProvider.config()
                         .setHName("manageUser.manageNoticePerm")
                         .setHWidth("width-140-p")
-                         .setDType("renderer")
+                        .setDType("renderer")
                         .setDAlign("text-center pdr0 pdt0 pdl0 pdb0")
                         .setDName("Notice")
                         .setDRenderer("WORKSPACE_USE_YN"));
@@ -130,10 +130,10 @@
                         currentPage = selectedPage;
                     }
 
-                    var conditions = {                        
+                    var conditions = {
                         name : $scope.vm.search.levelName //�벑湲됰챸
                     };
-                    
+
                     //�뀒�씠釉� 由ъ뒪�듃 �뜲�씠�꽣 而⑦듃濡ㅻ윭 �슂泥�
                     UserWorkspace.levelFind($resourceProvider.getContent(conditions,
                         $resourceProvider.getPageContent(currentPage, $scope.vm.page.selectedPageRowCount))).then(function (result) {
diff --git a/src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js b/src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js
index 2554779..2fb0d40 100644
--- a/src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js
+++ b/src/main/webapp/scripts/components/userWorkspace/userWorkspace.service.js
@@ -7,7 +7,7 @@
     app.factory("UserWorkspace", ['$http', '$log', function ($http, $log) {
         return {
             levelFind : function (conditions) {
-                return $http.post("userWorkspace/levelFind", conditions).then(function (response) {
+                return $http.post("userLevel/find", conditions).then(function (response) {
                     $log.debug("�궗�슜�옄 �벑湲� 紐⑸줉 : ", response);
                     return response;
                 });

--
Gitblit v1.8.0