diff --git a/egovframe-template-simple-react-contribution/src/components/EgovHeader.jsx b/egovframe-template-simple-react-contribution/src/components/EgovHeader.jsx index 4937059..6e4f1d7 100644 --- a/egovframe-template-simple-react-contribution/src/components/EgovHeader.jsx +++ b/egovframe-template-simple-react-contribution/src/components/EgovHeader.jsx @@ -177,12 +177,12 @@ function EgovHeader({ loginUser, onChangeLogin }) {

사이트관리

} @@ -241,8 +241,8 @@ function EgovHeader({ loginUser, onChangeLogin }) { {sessionUserSe ==='ACC_TP01' && <> -

사이트관리

-
+

사이트관리

+ {/*
-
+
*/} } diff --git a/egovframe-template-simple-react-contribution/src/components/leftmenu/EgovLeftNavAdmin.jsx b/egovframe-template-simple-react-contribution/src/components/leftmenu/EgovLeftNavAdmin.jsx index 8b394bb..56ef0b9 100644 --- a/egovframe-template-simple-react-contribution/src/components/leftmenu/EgovLeftNavAdmin.jsx +++ b/egovframe-template-simple-react-contribution/src/components/leftmenu/EgovLeftNavAdmin.jsx @@ -1,11 +1,13 @@ -import React from 'react'; +import React, {useCallback, useEffect, useState} from 'react'; import { useLocation } from 'react-router-dom'; import { NavLink } from 'react-router-dom'; import URL from 'constants/url'; import {Accordion} from "react-bootstrap"; +import * as EgovNet from "../../api/egovFetch"; function EgovLeftNavAdmin(props) { const location = useLocation(); + const [accordion, setAccordion] = useState([]); const getMiddleFolder = (url) => { // 중간 폴더를 가져오는 로직 추가 const parts = url.split('/').filter(Boolean); // '/'로 분할하고 빈 문자열을 필터링 @@ -36,106 +38,66 @@ function EgovLeftNavAdmin(props) { // activeKey = "7"; // } + const getMenuAuth = useCallback(()=>{ + EgovNet.requestFetch( + '/leftNav/menu?menuType=MNU_0000', + { + method: "GET" + }, + (resp) => { + const temp = []; + resp.result.menuList.forEach(function (group, i) { + temp.push( + + {group.menuTitle} + + + + + ) + }) + setAccordion(temp) + }, + function (resp){ + + } + ); + }, []); + + useEffect(()=>{ + getMenuAuth(); + }, []) + return (

사이트관리 (isActive ? "cur" : "")}>
Dashboard

- {/**/} - {/* 사이트 관리*/} - {/* */} - {/*
    */} - {/*
  • (isActive ? "cur" : "")}>Dashboard
  • */} - {/* /!*
  • (isActive ? "cur" : "")}>게시판생성관리
  • */} - {/*
  • (isActive ? "cur" : "")}>게시판사용관리
  • */} - {/*
  • (isActive ? "cur" : "")}>공지사항관리
  • */} - {/*
  • (isActive ? "cur" : "")}>사이트갤러리관리
  • */} - {/*
  • (isActive ? "cur" : "")}>사이트관리자 암호변경
  • *!/*/} - {/*
*/} - {/*
*/} - {/*
*/} - - 환경설정 - -
    -
  • (isActive ? "cur" : "")}>기본코드 관리
  • -
  • (isActive ? "cur" : "")}>건설기준코드 관리
  • -
  • (isActive ? "cur" : "")}>위원회코드 관리
  • -
  • (isActive ? "cur" : "")}>메뉴 관리
  • -
  • (isActive ? "cur" : "")}>메뉴권한 관리
  • -
  • (isActive ? "cur" : "")}>관련사이트 관리
  • -
-
-
- - - 사용자 관리 - -
    -
  • (isActive ? "cur" : "")}>사용자 목록
  • -
-
-
- - - 게시판현황 - -
    -
  • (isActive ? "cur" : "")}>게시판 관리
  • -
  • (isActive ? "cur" : "")}>게시물 관리
  • - {/*
  • (isActive ? "cur" : "")}>키워드 관리
  • */} -
-
-
- - - 건설기준관리 - -
    - {/*
  • (isActive ? "cur" : "")}>참조코드 관리
  • */} -
  • (isActive ? "cur" : "")}>API KEY 관리
  • -
  • (isActive ? "cur" : "")}>유사성 검사
  • -
  • (isActive ? "cur" : "")}>건설기준 내용 관리
  • -
-
-
- - - 컨텐츠관리 - -
    -
  • (isActive ? "cur" : "")}>설문 관리
  • -
  • (isActive ? "cur" : "")}>팝업 관리
  • -
  • (isActive ? "cur" : "")}>건설기준연구 관리
  • - {/*
  • (isActive ? "cur" : "")}>문자 발송
  • */} -
-
-
- - - 위원회관리 - -
    -
  • (isActive ? "cur" : "")}>진행현황 관리
  • -
  • (isActive ? "cur" : "")}>위원회 일정 관리
  • -
-
-
- - - 로그현황 - -
    -
  • (isActive ? "cur" : "")}>메뉴별 접속 현황
  • -
  • (isActive ? "cur" : "")}>사용자 접속 현황
  • -
  • (isActive ? "cur" : "")}>개인정보 로그 현황
  • -
  • (isActive ? "cur" : "")}>파일 다운 현황
  • -
-
-
+ {accordion} + {/*{menuList.map((group, i) => { + return ( + + {group.menuTitle} + +
    + {group.childList.map((menu) => { + return ( +
  • (isActive ? "cur" : "")}>{menu.menuTitle}
  • + ) + })} +
+
+
+ ) + })}*/}
-
); 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 4d498a1..dd17ce0 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 @@ -39,7 +39,10 @@ function MenuAuthMgt(props) { if(checked) { item.menuAuth += ","+role.itemCd }else{ - item.menuAuth = item.menuAuth.replace(","+role.itemCd, ''); + item.menuAuth = item.menuAuth.replace(role.itemCd, ''); + if(item.menuAuth.startsWith(",")) { + item.menuAuth.replace(",", "") + } } }} defaultChecked={item.menuAuth.includes(role.itemCd)}/> diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/entity/TcMenu.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/entity/TcMenu.java index a310df2..d910167 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/entity/TcMenu.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/entity/TcMenu.java @@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; import javax.validation.constraints.NotBlank; import java.time.LocalDateTime; +import java.util.List; @Getter @Setter @@ -53,9 +54,18 @@ public class TcMenu { @Column(name = "use_yn") private String useYn; + @Transient + private String groupTitle; + @Transient private String menuTypeValue; @Transient private String menuAuth; + + @Transient + private List roleList; + + @Transient + private List childList; } diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/mapper/TcMenuMapper.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/mapper/TcMenuMapper.java index c45db0d..1b85f0a 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/mapper/TcMenuMapper.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/config/mapper/TcMenuMapper.java @@ -11,4 +11,6 @@ public interface TcMenuMapper { List selectMenuList(); List selectMenuAuthList(); + + List selectMenuListToRole(TcMenu params); } 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 bc1ed0f..dad96f7 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 @@ -162,6 +162,14 @@ public class AdminConfigService extends EgovAbstractServiceImpl { return menuMapper.selectMenuAuthList(); } + + public List selectMenuListToRole(String menuTypeCd, List roleList){ + TcMenu params = new TcMenu(); + params.setMenuTypeCd(menuTypeCd); + params.setRoleList(roleList); + return menuMapper.selectMenuListToRole(params); + } + @Transactional public void editMenuAuth(TcMenu menu) { String[] roleAry = menu.getMenuAuth().split(","); diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/leftNav/LeftNavController.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/leftNav/LeftNavController.java new file mode 100644 index 0000000..50ef3d3 --- /dev/null +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/admin/leftNav/LeftNavController.java @@ -0,0 +1,59 @@ +package com.dbnt.kcscbackend.admin.leftNav; + + +import com.dbnt.kcscbackend.admin.config.entity.TcMenu; +import com.dbnt.kcscbackend.admin.config.service.AdminConfigService; +import com.dbnt.kcscbackend.auth.entity.LoginVO; +import com.dbnt.kcscbackend.config.common.ResultVO; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/leftNav") +@Tag(name="LeftNavController", description = "leftNav 컨트롤러") +public class LeftNavController { + + private final AdminConfigService adminConfigService; + + @RequestMapping(method = RequestMethod.GET, value = "/menu") + public ResultVO getMenu( + @AuthenticationPrincipal LoginVO user, + @RequestParam(value="menuType", required = true) String menuTypeCd + ){ + ResultVO resultVO = new ResultVO(); + List menuList = adminConfigService.selectMenuListToRole(menuTypeCd, Arrays.asList(user.getUserRole().split(","))); + Map groupMap = new LinkedHashMap<>(); + for(TcMenu menu: menuList){ + groupMap.put(menu.getMenuGroup(), menu.getGroupTitle()); + } + List groupList = new ArrayList<>(); + for(Map.Entry group: groupMap.entrySet()){ + TcMenu temp = new TcMenu(); + temp.setMenuId(group.getKey()); + temp.setMenuTitle(group.getValue()); + groupList.add(temp); + } + for(TcMenu group: groupList){ + for(TcMenu menu: menuList){ + if(group.getMenuId().equals(menu.getMenuGroup())){ + if(group.getChildList()==null){ + group.setChildList(new ArrayList<>()); + } + group.getChildList().add(menu); + } + } + } + Map resultMap = new HashMap<>(); + resultMap.put("menuList", groupList); + resultVO.setResult(resultMap); + return resultVO; + } +} diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/LoginVO.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/LoginVO.java index 52b7c3d..125d4df 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/LoginVO.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/auth/entity/LoginVO.java @@ -61,6 +61,9 @@ public class LoginVO implements Serializable{ @Schema(description = "사용자 구분", allowableValues = {"ACC_TP01", "ACC_TP02"}, defaultValue = "ACC_TP02") private String userSe; + @Schema(description = "사용자 ROLE") + private String userRole; + @Schema(description = "이름") @NotBlank(message = "이름을 입력해주세요.") private String userNm; diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/EgovJwtTokenUtil.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/EgovJwtTokenUtil.java index e448128..84ee52f 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/EgovJwtTokenUtil.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/EgovJwtTokenUtil.java @@ -70,6 +70,10 @@ public class EgovJwtTokenUtil implements Serializable{ Claims claims = getClaimFromToken(token); return claims.get("userSe").toString(); } + public String getUserRoleFromToken(String token) { + Claims claims = getClaimFromToken(token); + return claims.get("userRole").toString(); + } public String getInfoFromToken(String type, String token) { Claims claims = getClaimFromToken(token); return claims.get(type).toString(); @@ -96,7 +100,8 @@ public class EgovJwtTokenUtil implements Serializable{ claims.put("userSeq", loginVO.getUserSeq()); claims.put("id", loginVO.getUserId()); claims.put("remoteAddr", remoteAddr); - claims.put("userSe", loginVO.getUserSe() ); + claims.put("userSe", loginVO.getUserSe()); + claims.put("userRole", loginVO.getUserRole()); claims.put("type", "Authorization"); log.debug("===>>> secret = "+SECRET_KEY); diff --git a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/JwtAuthenticationFilter.java b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/JwtAuthenticationFilter.java index 00287f9..54db30c 100644 --- a/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/JwtAuthenticationFilter.java +++ b/kcsc-back-end/src/main/java/com/dbnt/kcscbackend/config/jwt/JwtAuthenticationFilter.java @@ -69,7 +69,8 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter { logger.debug("jwtToken validated"); loginVO.setUserSeq(Integer.parseInt(jwtTokenUtil.getUserSeqFromToken(jwtToken))); loginVO.setId(id); - loginVO.setUserSe( jwtTokenUtil.getUserSeFromToken(jwtToken) ); + loginVO.setUserSe(jwtTokenUtil.getUserSeFromToken(jwtToken)); + loginVO.setUserRole(jwtTokenUtil.getUserRoleFromToken(jwtToken)); // loginVO.setUniqId( jwtTokenUtil.getInfoFromToken("uniqId",jwtToken) ); // loginVO.setOrgnztId( jwtTokenUtil.getInfoFromToken("orgnztId",jwtToken) ); // loginVO.setName( jwtTokenUtil.getInfoFromToken("name",jwtToken) ); diff --git a/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml b/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml index 8db1fc4..10f07ee 100644 --- a/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml +++ b/kcsc-back-end/src/main/resources/mybatisMapper/TcMenuMapper.xml @@ -28,6 +28,7 @@ select a.menu_id , a.menu_title , a.menu_group , + a.menu_url, coalesce(b.role_cd, '') as menu_auth from tc_menu a left outer join ( @@ -38,4 +39,27 @@ where a.use_yn = 'Y' order by a.menu_id asc + + \ No newline at end of file