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

강석 최 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 javax.persistence.Transient;
import java.util.List;
@Getter
@Setter
@NoArgsConstructor
public class BaseModel {
@Transient
private List<String> organCdList;
@Transient
private Integer pageIndex=1; //요청페이지
@Transient

View File

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

View File

@ -1,5 +1,9 @@
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.codeMgt.CodeMgtService;
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.servlet.ModelAndView;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpSession;
@ -20,6 +25,8 @@ import javax.servlet.http.HttpSession;
public class BaseController {
private final CodeMgtService codeMgtService;
private final OrganConfigService organConfigService;
private final MenuMgtService menuMgtService;
@GetMapping("/")
public ModelAndView loginCheck(@AuthenticationPrincipal UserInfo loginUser, HttpSession session) {
@ -27,7 +34,11 @@ public class BaseController {
if(loginUser == null){
mav = new ModelAndView("redirect:/login");
}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");
}
return mav;

View File

@ -1,5 +1,6 @@
package com.dbnt.faisp.menuMgt;
import com.dbnt.faisp.authMgt.model.AccessConfig;
import com.dbnt.faisp.menuMgt.mapper.MenuMgtMapper;
import com.dbnt.faisp.menuMgt.model.MenuMgt;
import com.dbnt.faisp.menuMgt.repository.MenuMgtRepository;
@ -7,6 +8,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.List;
@Service
@ -82,4 +84,28 @@ public class MenuMgtService {
}
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);
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 javax.persistence.*;
import java.util.List;
@Getter
@Setter
@ -32,6 +33,13 @@ public class MenuMgt extends BaseModel {
@Column(name = "approval_chk")
private String approvalChk;
@Transient
private String menuCd;
@Transient
private String menuNm;
@Transient
private List<MenuMgt> childList;
@Transient
private Integer cat1RowspanCnt;
@Transient

View File

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

@ -62,11 +62,11 @@ public class UserInfo extends BaseModel implements UserDetails{
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
Set<GrantedAuthority> roles = new HashSet<>();
for (String role : userRole.split(",")) {
roles.add(new SimpleGrantedAuthority(role));
}
return roles;
Set<GrantedAuthority> roles = new HashSet<>();
for (String role : userRole.split(",")) {
roles.add(new SimpleGrantedAuthority(role));
}
return roles;
}
@Override
@ -94,12 +94,12 @@ public class UserInfo extends BaseModel implements UserDetails{
return userStatus.equals("USC003");
}
@Override
public String toString() {
return "UserInfo [userSeq=" + userSeq + ", userId=" + userId + ", password=" + password + ", userNm=" + userNm
+ ", ogCd=" + ogCd + ", ofcCd=" + ofcCd + ", userRole=" + userRole + ", userStatus=" + userStatus
+ ", wrtDt=" + wrtDt + ", modifyPassword=" + modifyPassword + ", positionName=" + positionName
+ ", departmentName=" + departmentName + ", accessConfigList=" + accessConfigList + ", approvalConfigList="
+ approvalConfigList + "]";
}
@Override
public String toString() {
return "UserInfo [userSeq=" + userSeq + ", userId=" + userId + ", password=" + password + ", userNm=" + userNm
+ ", ogCd=" + ogCd + ", ofcCd=" + ofcCd + ", userRole=" + userRole + ", userStatus=" + userStatus
+ ", wrtDt=" + wrtDt + ", modifyPassword=" + modifyPassword + ", positionName=" + positionName
+ ", departmentName=" + departmentName + ", accessConfigList=" + accessConfigList + ", approvalConfigList="
+ approvalConfigList + "]";
}
}

View File

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

View File

@ -56,7 +56,7 @@
</div>
</div>
<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">
<input type="checkbox" id="approvalChk" name="approvalChk" value="T" th:checked="${menuMgt.approvalChk eq 'T'}">
</div>

View File

@ -10,20 +10,18 @@
</a>
</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="/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="/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="#" 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 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>
</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="/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>
</th:block>
</ul>
</div>
<div sec:authorize="isAuthenticated()">