캐모마일 메뉴 모듈 가이드
개요
캐모마일 프레임워크의 Admin 시스템을 통해 등록된 메뉴에 권한을 부여하고 메뉴 리스트를 불러서 활용할 때 사용하는 API를 말한다.
메뉴 API를 만들게 된 목적은 복잡한 권한시스템과 맞물려 메뉴의 계증구조를 가져와야 하는 어려움을 해소는 것이다.
캐모마일 프레임워크를 사용하여 개발을 하는 모든 사용자는 해당 API를 호출하면 메뉴리스트 호츌 시 개발시간을 단축시키고 번거로움을 해소할 수 있다.
관련 클래스
- MenuService: DB에서 권한 정보와 메뉴 정보를 읽어와 적절한 계층 구조 리스트를 반환하는 관련 기능을 제공하는 클래스이다.
- QueryProperty: 쿼리에서 사용될 프로퍼티 설정 정보를 담는 클래스이다.
dependency
<dependency>
<groupId>net.lotte.chamomile.module</groupId>
<artifactId>chamomile-menu</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
사용법
[설정]
메뉴 관련 정보를 application.properties(또는 application.yml)파일에 입력하면 해당 정보를 기반으로 queryProperty와 menuService bean이 자동으로 생성된다.
(※ 정보를 입력하지 않을 경우 default 값으로 생성)
// 설정 관련 소스
@ConfigurationProperties
@Getter
public class MenuQueryProperties {
private String tableName;
private String tableName2;
private String keyColumn;
private String menuLvlColumn;
private String menuUriColumn;
private String menuNameColumn;
private String upperMenuIdColumn;
private String menuDescColumn;
private String menuSeqColumn;
private String leftMenuYnColumn;
private String useYnColumn;
private String adminMenuYnColumn;
private String menuHelpUriColumn;
private String menuScriptColumn;
private String roleIdColumn;
..
}
직접 bean을 생성하고 싶다면 다음과 같이 생성하면 된다.
@EnableConfigurationProperties({MenuQueryProperties.class, ChamomileJdbcProperties.class})
@Configuration
public class ChamomileMenuConfiguration {
private final MenuQueryProperties menuQueryProperties;
@PersistenceContext
private EntityManager em;
public ChamomileMenuConfiguration(MenuQueryProperties menuQueryProperties) {
this.menuQueryProperties = menuQueryProperties;
}
@Bean
@ConditionalOnMissingBean
public QueryProperty queryProperty() {
QueryProperty queryProperty = QueryProperty.builder()
.tableName(menuQueryProperties.getTableName())
.tableName2(menuQueryProperties.getTableName2())
.keyColumn(menuQueryProperties.getKeyColumn())
.menuLvlColumn(menuQueryProperties.getMenuLvlColumn())
.menuUriColumn(menuQueryProperties.getMenuUriColumn())
.menuNameColumn(menuQueryProperties.getMenuNameColumn())
.upperMenuIdColumn(menuQueryProperties.getUpperMenuIdColumn())
.menuDescColumn(menuQueryProperties.getMenuDescColumn())
.menuSeqColumn(menuQueryProperties.getMenuSeqColumn())
.leftMenuYnColumn(menuQueryProperties.getLeftMenuYnColumn())
.useYnColumn(menuQueryProperties.getUseYnColumn())
.adminMenuYnColumn(menuQueryProperties.getAdminMenuYnColumn())
.menuHelpUriColumn(menuQueryProperties.getMenuHelpUriColumn())
.menuScriptColumn(menuQueryProperties.getMenuScriptColumn())
.roleIdColumn(menuQueryProperties.getRoleIdColumn())
.build();
return queryProperty;
}
@Bean
public MenuService menuService(JdbcTemplate jdbcTemplate, MessageSource messageSource) {
return new MenuService(jdbcTemplate, messageSource, queryProperty());
}
}
메뉴 목록 조회 API
메소드명 | 파라미터 | 반환값 | 설명 |
---|---|---|---|
findMyMenu | String adminYn, Locale locale | List<Map<String, Object>> | adminYn : MenuService.ADMIN_MENU 또는 MenuService.SERVICE_MENU / locale : 적용하고자하는 언어 정보(null일경우 현재 설정언어) |
[예제]
MenuService bean을 이용해 게층 구조의 메뉴 목록을 조회한다.
@RestController
@RequiredArgsConstructor
@Slf4j
public class TestMenuController {
private final MenuService menuService;
@GetMapping("menu")
public List<Map<String, Object>> findMyMenuTest() {
List<Map<String, Object>> myMenu = menuService.findMyMenu(MenuService.ADMIN_MENU, null); // locale이 null이면 현재 설정
return myMenu;
}
}
json형태로 변환시 아래와 같이 데이터가 리턴된다.
[
{
"useYnNm":"사용",
"useYn":"1",
"menuSeq":"10",
"menuHelpUri":null,
"adminMenuYn":"1",
"menuCode" : "menu.data.menu00000001", // 다국어 처리시 사용되는 메뉴 코드 값
"menuId":"menu00000001", // 메뉴아이디
"menuLvlNm":"대메뉴",
"menuUri":null, // 메뉴에 지정된 url
"upperMenuId":"root", // 부모 메뉴아이디
"leftMenuYn":"1",
"menuLvl":"0", // 메뉴레벨(깊이)
"menuScript":"<i class='fa fa-cubes ...></b></i>", // 메뉴를 꾸며줄 부가정보(스크립트)
"menuDesc":null,
"menuName":"자원관리" // 메뉴명
},
..
]