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 }) {
사이트관리
- - (isActive ? "cur" : "")}>일정관리
- - (isActive ? "cur" : "")}>게시판생성관리
+ - (isActive ? "cur" : "")}>대시보드
+ {/*- (isActive ? "cur" : "")}>게시판생성관리
- (isActive ? "cur" : "")}>게시판사용관리
- (isActive ? "cur" : "")}>공지사항관리
- (isActive ? "cur" : "")}>사이트갤러리관리
- - (isActive ? "cur" : "")}>사이트관리자 암호변경
+ - (isActive ? "cur" : "")}>사이트관리자 암호변경
*/}
}
@@ -241,8 +241,8 @@ function EgovHeader({ loginUser, onChangeLogin }) {
{sessionUserSe ==='ACC_TP01' &&
<>
- 사이트관리
-
+
사이트관리
+ {/*
- (isActive ? "cur" : "")}>일정관리
- (isActive ? "cur" : "")}>게시판생성관리
@@ -251,7 +251,7 @@ function EgovHeader({ loginUser, onChangeLogin }) {
- (isActive ? "cur" : "")}>사이트갤러리관리
- (isActive ? "cur" : "")}>사이트관리자 암호변경
-
+
*/}
>
}
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}
+
+
+ {group.childList.map((menu) => {
+ return (
+ - (isActive ? "cur" : "")}>{menu.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