💬
목차
< 뒤로가기
인쇄

캐모마일 메뉴 모듈 가이드

개요

캐모마일 프레임워크의 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":"자원관리"       // 메뉴명
  },
  ..
]
이전 파일
다음 다국어