diff --git a/egovframe-template-simple-react-contribution/src/pages/admin/config/MenuAuthMgt.jsx b/egovframe-template-simple-react-contribution/src/pages/admin/config/MenuAuthMgt.jsx index 15bb126..e45d15e 100644 --- a/egovframe-template-simple-react-contribution/src/pages/admin/config/MenuAuthMgt.jsx +++ b/egovframe-template-simple-react-contribution/src/pages/admin/config/MenuAuthMgt.jsx @@ -4,6 +4,7 @@ import {Link} from "react-router-dom"; import URL from "constants/url"; import * as EgovNet from "api/egovFetch"; import Form from "react-bootstrap/Form"; +import CODE from "../../../constants/code"; function MenuAuthMgt(props) { @@ -29,7 +30,20 @@ function MenuAuthMgt(props) { menuList.forEach(function (item, index) { const checkboxs = []; roleList.forEach(function (role) { - checkboxs.push(
) + checkboxs.push( +
+ { + const checked = e.target.checked; + if(checked) { + item.menuAuth += ","+role.itemCd + }else{ + item.menuAuth = item.menuAuth.replace(","+role.itemCd, ''); + } + }} + defaultChecked={item.menuAuth.includes(role.itemCd)}/> +
+ ) }); mutListTag.push(
@@ -59,7 +73,27 @@ function MenuAuthMgt(props) { },[]); function editMenu(menu){ - + if(window.confirm("수정하시겠습니까?")) { + EgovNet.requestFetch( + '/admin/config/menu-auth-mgt', + { + method: "PUT", + headers: { + 'Content-type': 'application/json' + }, + body: JSON.stringify(menu) + }, + (resp) => { + if (Number(resp.resultCode) === Number(CODE.RCV_SUCCESS)) { + alert("수정되었습니다.") + } else if (Number(resp.resultCode) === Number(CODE.RCV_ERROR_AUTH)) { + console.log("토큰 갱신중.") + } else { + alert(resp.result.resultMessage) + } + } + ) + } } useEffect(()=>{ diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/AdminConfigController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/AdminConfigController.java index 6774d6f..58a14b9 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/AdminConfigController.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/AdminConfigController.java @@ -324,4 +324,30 @@ public class AdminConfigController extends BaseController { return resultVO; } + @Operation( + summary = "메뉴 권한 수정", + description = "메뉴 권한 수정", + tags = {"AdminConfigController"} + ) + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "수정 성공"), + @ApiResponse(responseCode = "403", description = "인가된 사용자가 아님") + }) + @RequestMapping(method = RequestMethod.PUT, value = "/menu-auth-mgt") + public ResultVO editMenuAuthMgt(@RequestBody TcMenu menu, @AuthenticationPrincipal LoginVO user){ + ResultVO resultVO = new ResultVO(); + if(user == null){ + resultVO.setResultCode(ResponseCode.TOKEN_EXPIRED.getCode()); + }else { + if (!user.getUserSe().equals("ACC_TP01")) { + resultVO.setResultCode(ResponseCode.AUTH_ERROR.getCode()); + resultVO.setResultMessage(ResponseCode.AUTH_ERROR.getMessage()); + } else { + adminConfigService.editMenuAuth(menu); + resultVO.setResultCode(ResponseCode.SUCCESS.getCode()); + } + } + return resultVO; + } + } diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/entity/TbMenuRole.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/entity/TbMenuRole.java new file mode 100644 index 0000000..22e0205 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/entity/TbMenuRole.java @@ -0,0 +1,39 @@ +package com.dbnt.kcscbackend.admin.config.entity; + +import lombok.*; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.persistence.*; +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.time.LocalDateTime; + +@Getter +@Setter +@Entity +@NoArgsConstructor +@DynamicInsert +@DynamicUpdate +@Table(name = "tb_menu_role") +@IdClass(TbMenuRole.TbMenuRoleId.class) +public class TbMenuRole { + @Id + @Column(name = "role_id") + private String roleId; + @Id + @Column(name = "menu_id") + private String menuId; + @Column(name = "write_yn") + private String writeYn; + + @Embeddable + @Data + @NoArgsConstructor + @AllArgsConstructor + public static class TbMenuRoleId implements Serializable { + private String roleId; + private String menuId; + } +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/repository/TbMenuRoleRepository.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/repository/TbMenuRoleRepository.java new file mode 100644 index 0000000..3d96be3 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/repository/TbMenuRoleRepository.java @@ -0,0 +1,11 @@ +package com.dbnt.kcscbackend.admin.config.repository; + +import com.dbnt.kcscbackend.admin.config.entity.TbMenuRole; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface TbMenuRoleRepository extends JpaRepository { + + void deleteByMenuId(String menuId); +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/service/AdminConfigService.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/service/AdminConfigService.java index d0ce2b5..0c5fd44 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/service/AdminConfigService.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/service/AdminConfigService.java @@ -1,7 +1,9 @@ package com.dbnt.kcscbackend.admin.config.service; +import com.dbnt.kcscbackend.admin.config.entity.TbMenuRole; import com.dbnt.kcscbackend.admin.config.entity.TcMenu; import com.dbnt.kcscbackend.admin.config.mapper.TcMenuMapper; +import com.dbnt.kcscbackend.admin.config.repository.TbMenuRoleRepository; import com.dbnt.kcscbackend.admin.config.repository.TcMenuRepository; import com.dbnt.kcscbackend.commonCode.entity.TcCodeGrp; import com.dbnt.kcscbackend.commonCode.entity.TcCodeItem; @@ -13,6 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; @Service @@ -22,6 +25,7 @@ public class AdminConfigService extends EgovAbstractServiceImpl { private final TcCodeGrpRepository codeGrpRepository; private final TcCodeItemRepository codeItemRepository; private final TcMenuRepository menuRepository; + private final TbMenuRoleRepository menuRoleRepository; private final TcMenuMapper menuMapper; public List selectCodeGrpList(){ @@ -144,4 +148,21 @@ public class AdminConfigService extends EgovAbstractServiceImpl { public List selectMenuAuthList(){ return menuMapper.selectMenuAuthList(); } + + @Transactional + public void editMenuAuth(TcMenu menu) { + String[] roleAry = menu.getMenuAuth().split(","); + menuRoleRepository.deleteByMenuId(menu.getMenuId()); + List roleList = new ArrayList<>(); + for(String role: roleAry){ + if(!role.isEmpty()){ + TbMenuRole menuRole = new TbMenuRole(); + menuRole.setMenuId(menu.getMenuId()); + menuRole.setRoleId(role); + menuRole.setWriteYn("Y"); + roleList.add(menuRole); + } + } + menuRoleRepository.saveAll(roleList); + } } diff --git a/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml b/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml index 014d322..fcacbf3 100644 --- a/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml +++ b/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml @@ -31,13 +31,10 @@ coalesce(b.role_cd, '') as menu_auth from tc_menu a left outer join ( - select menu_id , string_agg(role_id, ',') as role_cd - from ( - select distinct * - from tb_menu_role - ) aa - group by menu_id - ) b on a.menu_id = b.menu_id + select menu_id , string_agg(role_id, ',') as role_cd + from tb_menu_role + group by menu_id + ) b on a.menu_id = b.menu_id where a.use_yn = 'Y' order by a.menu_id asc