메뉴 권한 관리 작업 완료

thkim
강석 최 2024-01-22 17:02:59 +09:00
parent 6c3aa18b94
commit 1a656c8f6d
6 changed files with 137 additions and 9 deletions

View File

@ -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(<div><Form.Check checked={item.menuAuth.includes(role.itemCd)}/></div>)
checkboxs.push(
<div>
<Form.Check className={role.itemCd} value={role.itemCd}
onClick={(e)=>{
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)}/>
</div>
)
});
mutListTag.push(
<div className={"list_item"} key={"userListDiv_"+index}>
@ -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(()=>{

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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<TbMenuRole, TbMenuRole.TbMenuRoleId> {
void deleteByMenuId(String menuId);
}

View File

@ -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<TcCodeGrp> selectCodeGrpList(){
@ -144,4 +148,21 @@ public class AdminConfigService extends EgovAbstractServiceImpl {
public List<TcMenu> selectMenuAuthList(){
return menuMapper.selectMenuAuthList();
}
@Transactional
public void editMenuAuth(TcMenu menu) {
String[] roleAry = menu.getMenuAuth().split(",");
menuRoleRepository.deleteByMenuId(menu.getMenuId());
List<TbMenuRole> 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);
}
}

View File

@ -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
</select>