사용자별 메뉴 표현 작업중.

강석 최 2022-09-01 18:38:16 +09:00
parent 34e7764240
commit 60a4a7d86d
14 changed files with 133 additions and 28 deletions

View File

@ -5,11 +5,14 @@ import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import javax.persistence.Transient; import javax.persistence.Transient;
import java.util.List;
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
public class BaseModel { public class BaseModel {
@Transient
private List<String> organCdList;
@Transient @Transient
private Integer pageIndex=1; //요청페이지 private Integer pageIndex=1; //요청페이지
@Transient @Transient

View File

@ -65,11 +65,13 @@ public class SecurityConfig{
).hasRole(Role.USER.name()) // USER, ADMIN 접근 허용 ).hasRole(Role.USER.name()) // USER, ADMIN 접근 허용
.antMatchers( .antMatchers(
"/codeMgt/**", "/codeMgt/**",
"/menuMgt/**", "/menuMgt/**"
).hasRole(Role.ADMIN.name()) // ADMIN만 접근 허용
.antMatchers(
"/authMgt/**", "/authMgt/**",
"/userMgt/**", "/userMgt/**",
"/organMgt/**" "/organMgt/**"
).hasRole(Role.ADMIN.name()) // ADMIN만 접근 허용 ).hasRole(Role.SUB_ADMIN.name()) // SUB_ADMIN만 접근 허용
.antMatchers("/login").permitAll() // 로그인 페이지는 권한 없이 접근 허용 .antMatchers("/login").permitAll() // 로그인 페이지는 권한 없이 접근 허용
.and() // 로그인 설정 .and() // 로그인 설정
.formLogin() .loginPage("/login") // Custom login form 사용 .formLogin() .loginPage("/login") // Custom login form 사용

View File

@ -1,5 +1,9 @@
package com.dbnt.faisp.controller; package com.dbnt.faisp.controller;
import com.dbnt.faisp.authMgt.AuthMgtService;
import com.dbnt.faisp.menuMgt.MenuMgtService;
import com.dbnt.faisp.menuMgt.model.MenuMgt;
import com.dbnt.faisp.organMgt.OrganConfigService;
import com.dbnt.faisp.userInfo.model.UserInfo; import com.dbnt.faisp.userInfo.model.UserInfo;
import com.dbnt.faisp.codeMgt.CodeMgtService; import com.dbnt.faisp.codeMgt.CodeMgtService;
import com.dbnt.faisp.codeMgt.model.CodeCatg; import com.dbnt.faisp.codeMgt.model.CodeCatg;
@ -11,6 +15,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
@ -20,6 +25,8 @@ import javax.servlet.http.HttpSession;
public class BaseController { public class BaseController {
private final CodeMgtService codeMgtService; private final CodeMgtService codeMgtService;
private final OrganConfigService organConfigService;
private final MenuMgtService menuMgtService;
@GetMapping("/") @GetMapping("/")
public ModelAndView loginCheck(@AuthenticationPrincipal UserInfo loginUser, HttpSession session) { public ModelAndView loginCheck(@AuthenticationPrincipal UserInfo loginUser, HttpSession session) {
@ -27,7 +34,11 @@ public class BaseController {
if(loginUser == null){ if(loginUser == null){
mav = new ModelAndView("redirect:/login"); mav = new ModelAndView("redirect:/login");
}else{ }else{
session.setAttribute("commonCodeList", codeMgtService.selectCommonCodeList()); loginUser.setOrganCdList(organConfigService.selectOrganListWhereUserOgCd(loginUser.getOgCd()));
List<MenuMgt> accessMenuList = menuMgtService.selectAccessMenuListWhereUserSeq(loginUser.getUserSeq());
List<CodeMgt> commonCodeList = codeMgtService.selectCommonCodeList();
session.setAttribute("menuList", menuList);
session.setAttribute("commonCodeList", commonCodeList);
mav = new ModelAndView("redirect:/dashboard"); mav = new ModelAndView("redirect:/dashboard");
} }
return mav; return mav;

View File

@ -1,5 +1,6 @@
package com.dbnt.faisp.menuMgt; package com.dbnt.faisp.menuMgt;
import com.dbnt.faisp.authMgt.model.AccessConfig;
import com.dbnt.faisp.menuMgt.mapper.MenuMgtMapper; import com.dbnt.faisp.menuMgt.mapper.MenuMgtMapper;
import com.dbnt.faisp.menuMgt.model.MenuMgt; import com.dbnt.faisp.menuMgt.model.MenuMgt;
import com.dbnt.faisp.menuMgt.repository.MenuMgtRepository; import com.dbnt.faisp.menuMgt.repository.MenuMgtRepository;
@ -7,6 +8,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.persistence.Transient; import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Service @Service
@ -82,4 +84,28 @@ public class MenuMgtService {
} }
return menuList; return menuList;
} }
public List<MenuMgt> selectAccessMenuListWhereUserSeq(Integer userSeq) {
List<MenuMgt> accessMenuList =menuMgtMapper.selectAccessMenuListWhereUserSeq(userSeq);
List<MenuMgt> menuList = new ArrayList<>();
for(MenuMgt menuMgt: accessMenuList){
boolean savedFlag = false;
for(MenuMgt savedMenu: menuList){
if(savedChk(menuMgt.getCat1Cd(), savedMenu.getCat1Cd())){
savedFlag = true;
break;
}
}
if(!savedFlag){
MenuMgt topMenu = new MenuMgt();
menuList.add(topMenu);
}
}
return menuList;
}
private boolean savedChk(String catCd1, String catCd2){
return catCd1.equals(catCd2);
}
} }

View File

@ -11,4 +11,6 @@ public interface MenuMgtMapper {
List<MenuMgt> selectMenuMgtList(MenuMgt menuMgt); List<MenuMgt> selectMenuMgtList(MenuMgt menuMgt);
Integer selectMenuMgtListCnt(MenuMgt menuMgt); Integer selectMenuMgtListCnt(MenuMgt menuMgt);
List<MenuMgt> selectAccessMenuListWhereUserSeq(Integer userSeq);
} }

View File

@ -8,6 +8,7 @@ import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate; import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.*; import javax.persistence.*;
import java.util.List;
@Getter @Getter
@Setter @Setter
@ -32,6 +33,13 @@ public class MenuMgt extends BaseModel {
@Column(name = "approval_chk") @Column(name = "approval_chk")
private String approvalChk; private String approvalChk;
@Transient
private String menuCd;
@Transient
private String menuNm;
@Transient
private List<MenuMgt> childList;
@Transient @Transient
private Integer cat1RowspanCnt; private Integer cat1RowspanCnt;
@Transient @Transient

View File

@ -1,5 +1,6 @@
package com.dbnt.faisp.organMgt; package com.dbnt.faisp.organMgt;
import com.dbnt.faisp.organMgt.mapper.OrganConfigMapper;
import com.dbnt.faisp.organMgt.model.OrganConfig; import com.dbnt.faisp.organMgt.model.OrganConfig;
import com.dbnt.faisp.organMgt.repository.OrganConfigRepository; import com.dbnt.faisp.organMgt.repository.OrganConfigRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -11,6 +12,7 @@ import java.util.List;
@RequiredArgsConstructor @RequiredArgsConstructor
public class OrganConfigService { public class OrganConfigService {
private final OrganConfigRepository organConfigRepository; private final OrganConfigRepository organConfigRepository;
private final OrganConfigMapper organConfigMapper;
public List<OrganConfig> selectSavedOrganList() { public List<OrganConfig> selectSavedOrganList() {
return organConfigRepository.findAll(); return organConfigRepository.findAll();
@ -21,4 +23,8 @@ public class OrganConfigService {
organConfigRepository.deleteByOrganType("OGC002"); organConfigRepository.deleteByOrganType("OGC002");
return organConfigRepository.saveAll(organConfigList).size(); return organConfigRepository.saveAll(organConfigList).size();
} }
public List<String> selectOrganListWhereUserOgCd(String ogCd) {
return organConfigMapper.selectOrganListWhereUserOgCd(ogCd);
}
} }

View File

@ -0,0 +1,11 @@
package com.dbnt.faisp.organMgt.mapper;
import com.dbnt.faisp.menuMgt.model.MenuMgt;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface OrganConfigMapper {
List<String> selectOrganListWhereUserOgCd(String ogCd);
}

View File

@ -94,12 +94,12 @@ public class UserInfo extends BaseModel implements UserDetails{
return userStatus.equals("USC003"); return userStatus.equals("USC003");
} }
@Override @Override
public String toString() { public String toString() {
return "UserInfo [userSeq=" + userSeq + ", userId=" + userId + ", password=" + password + ", userNm=" + userNm return "UserInfo [userSeq=" + userSeq + ", userId=" + userId + ", password=" + password + ", userNm=" + userNm
+ ", ogCd=" + ogCd + ", ofcCd=" + ofcCd + ", userRole=" + userRole + ", userStatus=" + userStatus + ", ogCd=" + ogCd + ", ofcCd=" + ofcCd + ", userRole=" + userRole + ", userStatus=" + userStatus
+ ", wrtDt=" + wrtDt + ", modifyPassword=" + modifyPassword + ", positionName=" + positionName + ", wrtDt=" + wrtDt + ", modifyPassword=" + modifyPassword + ", positionName=" + positionName
+ ", departmentName=" + departmentName + ", accessConfigList=" + accessConfigList + ", approvalConfigList=" + ", departmentName=" + departmentName + ", accessConfigList=" + accessConfigList + ", approvalConfigList="
+ approvalConfigList + "]"; + approvalConfigList + "]";
} }
} }

View File

@ -13,6 +13,7 @@
from menu_mgt a from menu_mgt a
left outer join access_config b left outer join access_config b
on a.menu_key = b.menu_key and b.user_seq = #{userSeq} on a.menu_key = b.menu_key and b.user_seq = #{userSeq}
order by cat1_cd, cat2_cd, cat3_cd
</select> </select>
<select id="selectApprovalConfigList" resultType="ApprovalConfig" parameterType="UserInfo"> <select id="selectApprovalConfigList" resultType="ApprovalConfig" parameterType="UserInfo">
@ -25,5 +26,6 @@
left outer join approval_config b left outer join approval_config b
on a.menu_key = b.menu_key and b.user_seq = #{userSeq} on a.menu_key = b.menu_key and b.user_seq = #{userSeq}
where a.approval_chk = 'T' where a.approval_chk = 'T'
order by cat1_cd, cat2_cd, cat3_cd
</select> </select>
</mapper> </mapper>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dbnt.faisp.organMgt.mapper.OrganConfigMapper">
<select id="selectOrganListWhereUserOgCd" resultType="string" parameterType="string">
with recursive organ_list (
organ_cd
) as(
select
organ_cd
from organ_config
where organ_cd = #{ogCd}
union all
select
a.organ_cd
from organ_config a
inner join organ_list b on a.parent_organ = b.organ_cd
)
select * from organ_list
</select>
</mapper>

View File

@ -47,4 +47,16 @@
</if> </if>
</where> </where>
</select> </select>
<select id="selectAccessMenuListWhereUserSeq" resultType="MenuMgt" parameterType="int">
select ab.cat1_cd,
ab.cat2_cd,
ab.cat3_cd,
ab.menu_url
from access_config aa
inner join menu_mgt ab on aa.menu_key = ab.menu_key
where aa.user_seq = #{userSeq}
and aa.access_auth is not null
order by cat1_cd, cat2_cd, cat3_cd
</select>
</mapper> </mapper>

View File

@ -56,7 +56,7 @@
</div> </div>
</div> </div>
<div class="row mb-3"> <div class="row mb-3">
<label for="menuUrl" class="col-sm-4 col-form-label col-form-label-sm text-center">제기능</label> <label for="menuUrl" class="col-sm-4 col-form-label col-form-label-sm text-center">재권한설정</label>
<div class="col-sm-6"> <div class="col-sm-6">
<input type="checkbox" id="approvalChk" name="approvalChk" value="T" th:checked="${menuMgt.approvalChk eq 'T'}"> <input type="checkbox" id="approvalChk" name="approvalChk" value="T" th:checked="${menuMgt.approvalChk eq 'T'}">
</div> </div>

View File

@ -10,20 +10,18 @@
</a> </a>
</div> </div>
<div> <div>
<ul class="nav nav-pills" sec:authorize="hasRole('ROLE_ADMIN')"> <ul class="nav nav-pills">
<th:block sec:authorize="hasRole('ROLE_ADMIN')">
<li class="nav-item"><a href="/codeMgt/codeMgtPage" class="nav-link p-1 link-dark">코드관리</a></li> <li class="nav-item"><a href="/codeMgt/codeMgtPage" class="nav-link p-1 link-dark">코드관리</a></li>
<li class="nav-item"><a href="/organMgt/organMgtPage" class="nav-link p-1 link-dark">관서설정</a></li> <li class="nav-item"><a href="/organMgt/organMgtPage" class="nav-link p-1 link-dark">관서설정</a></li>
<li class="nav-item"><a href="/menuMgt/menuMgtPage" class="nav-link p-1 link-dark">메뉴관리</a></li> <li class="nav-item"><a href="/menuMgt/menuMgtPage" class="nav-link p-1 link-dark">메뉴관리</a></li>
</th:block>
<th:block sec:authorize="hasRole('ROLE_SUB_ADMIN')">
<li class="nav-item"><a href="/userMgt/userMgtPage" class="nav-link p-1 link-dark">외사경찰관리</a></li> <li class="nav-item"><a href="/userMgt/userMgtPage" class="nav-link p-1 link-dark">외사경찰관리</a></li>
<li class="nav-item"><a href="/authMgt/authMgtPage" class="nav-link p-1 link-dark">권한설정</a></li> <li class="nav-item"><a href="/authMgt/authMgtPage" class="nav-link p-1 link-dark">권한설정</a></li>
<li class="nav-item"><a href="#" class="nav-link p-1 link-dark">사용자로그</a></li> <li class="nav-item"><a href="#" class="nav-link p-1 link-dark">사용자로그</a></li>
<li class="nav-item"><a href="#" class="nav-link p-1 link-dark">접속설정</a></li> <li class="nav-item"><a href="#" class="nav-link p-1 link-dark">접속설정</a></li>
</ul> </th:block>
<ul class="nav nav-pills" sec:authorize="hasRole('ROLE_SUB_ADMIN')">
<li class="nav-item"><a href="#" class="nav-link p-1 link-dark">외사경찰관리</a></li>
<li class="nav-item"><a href="/authMgt/authMgtPage" class="nav-link p-1 link-dark">권한설정</a></li>
<li class="nav-item"><a href="#" class="nav-link p-1 link-dark">사용자로그</a></li>
<li class="nav-item"><a href="#" class="nav-link p-1 link-dark">접속설정</a></li>
</ul> </ul>
</div> </div>
<div sec:authorize="isAuthenticated()"> <div sec:authorize="isAuthenticated()">