diff --git a/src/main/java/com/dbnt/kcgfilemanager/controller/adminController.java b/src/main/java/com/dbnt/kcgfilemanager/controller/adminController.java index ad1d038..3d5b771 100644 --- a/src/main/java/com/dbnt/kcgfilemanager/controller/adminController.java +++ b/src/main/java/com/dbnt/kcgfilemanager/controller/adminController.java @@ -1,19 +1,21 @@ package com.dbnt.kcgfilemanager.controller; import com.dbnt.kcgfilemanager.model.BoardCategory; +import com.dbnt.kcgfilemanager.model.CategoryRole; import com.dbnt.kcgfilemanager.model.CommonCode; import com.dbnt.kcgfilemanager.model.UserInfo; import com.dbnt.kcgfilemanager.service.BoardCategoryService; +import com.dbnt.kcgfilemanager.service.CategoryRoleService; import com.dbnt.kcgfilemanager.service.CommonCodeService; import com.dbnt.kcgfilemanager.service.UserInfoService; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Optional; @RestController @RequiredArgsConstructor @@ -23,6 +25,7 @@ public class adminController { private final CommonCodeService commonCodeService; private final BoardCategoryService boardCategoryService; private final UserInfoService userInfoService; + private final CategoryRoleService categoryRoleService; @GetMapping("/main") public ModelAndView goAdmin() { @@ -83,6 +86,21 @@ public class adminController { mav.addObject("userInfo", userInfoService.selectUserInfo(userInfo)); return mav; } + @PostMapping("/insertCategoryRole") + @ResponseBody + public Integer insertCategoryRole(@RequestBody HashMap map){ + List mapList = (List)map.get("categoryRoleList"); + Integer userSeq = (int)map.get("userSeq"); + categoryRoleService.insertCategoryRole(userSeq, mapList); + return map.size(); + } + + @GetMapping("/selectCategoryRole") + public ModelAndView selectUserCategoryRole(CategoryRole categoryRole){ + ModelAndView mav = new ModelAndView("admin/userCategoryRole"); + /*mav.addObject("userCategoryRole", userInfoService.selectUserCategoryRole(categoryRole));*/ + return mav; + } @GetMapping("/modifyRequest") public ModelAndView modifyRequest() { diff --git a/src/main/java/com/dbnt/kcgfilemanager/model/CategoryRole.java b/src/main/java/com/dbnt/kcgfilemanager/model/CategoryRole.java new file mode 100644 index 0000000..8c3da10 --- /dev/null +++ b/src/main/java/com/dbnt/kcgfilemanager/model/CategoryRole.java @@ -0,0 +1,29 @@ +package com.dbnt.kcgfilemanager.model; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.*; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "CATEGORY_ROLE") +@IdClass(CategoryRoleId.class) +public class CategoryRole { + @Id + @Column(name = "USER_SEQ", nullable = false) + private Integer userSeq; + @Id + @Column(name = "CATEGORY_SEQ", nullable = false) + private Integer categorySeq; + @Column(name = "CATEGORY_ROLE") + private String categoryRole; + +} diff --git a/src/main/java/com/dbnt/kcgfilemanager/model/CategoryRoleId.java b/src/main/java/com/dbnt/kcgfilemanager/model/CategoryRoleId.java new file mode 100644 index 0000000..1cb3028 --- /dev/null +++ b/src/main/java/com/dbnt/kcgfilemanager/model/CategoryRoleId.java @@ -0,0 +1,19 @@ +package com.dbnt.kcgfilemanager.model; + +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.IdClass; +import javax.persistence.Table; +import java.io.Serializable; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class CategoryRoleId implements Serializable { + private Integer userSeq; + private Integer categorySeq; +} diff --git a/src/main/java/com/dbnt/kcgfilemanager/repository/CategoryRoleRepository.java b/src/main/java/com/dbnt/kcgfilemanager/repository/CategoryRoleRepository.java new file mode 100644 index 0000000..8c58825 --- /dev/null +++ b/src/main/java/com/dbnt/kcgfilemanager/repository/CategoryRoleRepository.java @@ -0,0 +1,13 @@ +package com.dbnt.kcgfilemanager.repository; + +import com.dbnt.kcgfilemanager.model.CategoryRole; +import com.dbnt.kcgfilemanager.model.CategoryRoleId; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + + +public interface CategoryRoleRepository extends JpaRepository { + List findByUserSeq(Integer userSeq); + void deleteByUserSeq(Integer userSeq); +} diff --git a/src/main/java/com/dbnt/kcgfilemanager/service/CategoryRoleService.java b/src/main/java/com/dbnt/kcgfilemanager/service/CategoryRoleService.java new file mode 100644 index 0000000..d04e761 --- /dev/null +++ b/src/main/java/com/dbnt/kcgfilemanager/service/CategoryRoleService.java @@ -0,0 +1,33 @@ +package com.dbnt.kcgfilemanager.service; + +import com.dbnt.kcgfilemanager.model.CategoryRole; +import com.dbnt.kcgfilemanager.repository.CategoryRoleRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class CategoryRoleService { + private final CategoryRoleRepository categoryRoleRepository; + + @Transactional + public void insertCategoryRole(Integer userSeq, List mapList) { +// List categoryRoleList = categoryRoleRepository.findByUserSeq(userSeq); +// categoryRoleRepository.deleteAll(categoryRoleList); + categoryRoleRepository.deleteByUserSeq(userSeq); + List categoryRoleList = new ArrayList<>(); + for(LinkedHashMap map: mapList){ + CategoryRole categoryRole = new CategoryRole(); + categoryRole.setUserSeq((int)map.get("userSeq")); + categoryRole.setCategorySeq((int)map.get("categorySeq")); + categoryRole.setCategoryRole((String)map.get("categoryRole")); + categoryRoleList.add(categoryRole); + } + categoryRoleRepository.saveAll(categoryRoleList); + } +} diff --git a/src/main/resources/static/css/common.css b/src/main/resources/static/css/common.css index ae5afca..a00a45d 100644 --- a/src/main/resources/static/css/common.css +++ b/src/main/resources/static/css/common.css @@ -1,3 +1,4 @@ +/*로그인 폼*/ .form-signin{ width: 100%; max-width: 330px; @@ -10,6 +11,7 @@ transform: translate(-50%, -50%); } +/*사이드바 카테고리 트리*/ .btn-toggle:hover, .btn-toggle:focus { color: rgba(0, 0, 0, .85); background-color: #d2f4ea; diff --git a/src/main/resources/static/js/admin/userMgt.js b/src/main/resources/static/js/admin/userMgt.js index 41a2285..ddd78a9 100644 --- a/src/main/resources/static/js/admin/userMgt.js +++ b/src/main/resources/static/js/admin/userMgt.js @@ -1,5 +1,11 @@ $(function(){ setSearchCondition(); + + const categorySelectModal = document.getElementById('categorySelectModal'); + categorySelectModal.addEventListener('shown.bs.modal', function () { + + }) + $("#dateSelectorDiv").datepicker({ format: "yyyy-mm-dd", language: "ko" @@ -87,6 +93,40 @@ $(document).on('click', '#updateBtn', function (){ } }) +$(document).on('change', '.parentCategory', function (){ + const categorySeq = $(this).attr("data-categoryseq") + childCategoryStatusChange(categorySeq, this.checked); +}) + +$(document).on('click', '#saveCategoryRoleBtn', function (){ + const categoryRoleList = []; + const userSeq = Number($(".userInfoCheckBox:checked").val()); + $(".categoryCheckBox:checked").each(function (idx, el){ + categoryRoleList.push({ + userSeq : userSeq, + categorySeq : Number($(el).attr("data-categoryseq")), + categoryRole: 'T' + }); + }) + $.ajax({ + type : 'POST', + url : "/admin/insertCategoryRole", + data : JSON.stringify({categoryRoleList: categoryRoleList, userSeq: userSeq}), + contentType: 'application/json', + beforeSend: function (xhr){ + xhr.setRequestHeader($("[name='_csrf_header']").val(), $("[name='_csrf']").val()); + }, + success : function(data) { + getCategoryRole($(".userInfoCheckBox:checked").val()); + alert("저장되었습니다."); + $("#categorySelectModal").find(".btn-close").click(); + }, + error : function(xhr, status) { + + } + }) +}) + function valueCheck(form){ const targetForm = $("#"+form); const userId = targetForm.find("#userId").val(); @@ -151,9 +191,6 @@ function setSearchCondition(){ dateSelectorDiv.children().attr("disabled", "disabled"); } } -function formReset(){ - document.getElementById('userInfoInsert').reset(); -} function getUserSeq(){ return $(".userInfoCheckBox:checked").val(); @@ -177,17 +214,27 @@ function getUserInfo(userSeq){ } function getCategoryRole(userSeq){ if(userSeq !== undefined){ - /*$.ajax({ - url: '/admin/codeValue', - data: {category: category}, + $.ajax({ + url: '/admin/selectCategoryRole', + data: {userSeq: userSeq}, type: 'GET', dataType:"html", - success: function(data){ - $("#valueDiv").empty().append(data) + success: function(html){ + $("#userContent").empty().append(html) }, error:function(){ } - });*/ + }); + } +} + +function childCategoryStatusChange(parentCategory, flag){ + const target = $("[data-parentcategory='"+parentCategory+"']"); + if(target.length>0){ + target.prop("checked", flag); + target.each(function(idx, el){ + childCategoryStatusChange($(el).attr("data-categoryseq"), flag); + }) } } \ No newline at end of file diff --git a/src/main/resources/templates/admin/main.html b/src/main/resources/templates/admin/main.html index 7e18ed7..d8ec3ac 100644 --- a/src/main/resources/templates/admin/main.html +++ b/src/main/resources/templates/admin/main.html @@ -4,7 +4,7 @@ xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/layout}"> -
-

This is Admin Page.

+
+

관리자 메인 페이지

\ No newline at end of file diff --git a/src/main/resources/templates/admin/userCategoryRole.html b/src/main/resources/templates/admin/userCategoryRole.html new file mode 100644 index 0000000..1a9513a --- /dev/null +++ b/src/main/resources/templates/admin/userCategoryRole.html @@ -0,0 +1,13 @@ + + +
+
+ 권한 목록 +
+
+
+ +
+
+
+ \ No newline at end of file diff --git a/src/main/resources/templates/admin/userMgt.html b/src/main/resources/templates/admin/userMgt.html index 152b53c..753af81 100644 --- a/src/main/resources/templates/admin/userMgt.html +++ b/src/main/resources/templates/admin/userMgt.html @@ -9,6 +9,8 @@
+ +

사용자 관리

@@ -220,5 +222,79 @@
+ +
\ No newline at end of file diff --git a/src/main/resources/templates/fragments/leftMenu.html b/src/main/resources/templates/fragments/leftMenu.html index 00fd03e..9552d39 100644 --- a/src/main/resources/templates/fragments/leftMenu.html +++ b/src/main/resources/templates/fragments/leftMenu.html @@ -1,7 +1,7 @@ + xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5" xmlns="http://www.w3.org/1999/html">
@@ -13,10 +13,10 @@
- +
-
- +
+
diff --git a/src/main/resources/templates/main.html b/src/main/resources/templates/main.html index 5a1f1b5..6702b0f 100644 --- a/src/main/resources/templates/main.html +++ b/src/main/resources/templates/main.html @@ -4,7 +4,7 @@ xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity5" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/layout}"> -
-

님 환영합니다.

+
+

사용자 메인 페이지

\ No newline at end of file