권한에 따른 메뉴 분기

선행 작업

권한에 따른 메뉴 분기는 User Context에 권한 값을 가지고 있어야합니다.

로그인 시에 setUser를 이용하여 권한 값을 주입하십시오.

import { useAuth } from 'src/hooks/useAuth'

const { setUser } = useAuth()

메뉴 컴포넌트

메뉴는 UserLayout에서 주입되어 렌더링됩니다.

따라서 아래의 VerticalNavItems() 를 수정하면 권한에 따른 메뉴 분기를 구현할 수 있습니다.

frontend/src/layouts/UserLayout.tsx

    <Layout
      hidden={hidden}
      settings={settings}
      saveSettings={saveSettings}
      contentHeightFixed={contentHeightFixed}
      verticalLayoutProps={{
        navMenu: {
          navItems: VerticalNavItems()

메뉴 파일 작성

시스템관리자, 관리자, 사용자 권한 별로 분기하는 경우 아래와 같은 파일을 생성합니다.

frontend/src/navigation/vertical/admin.ts

// ** Type import
import { VerticalNavItemsType } from 'src/@core/layouts/types'

const navigation = (): VerticalNavItemsType => {
  return [
    {
      sectionTitle: '관리자'
    },
    {
      title: '관리자',
      icon: 'bx:home',
      path: '/admin'
    }
  ]
}

export default navigation

frontend/src/navigation/vertical/system-admin.ts

// ** Type import
import { VerticalNavItemsType } from 'src/@core/layouts/types'

const navigation = (): VerticalNavItemsType => {
  return [
    {
      sectionTitle: '시스템관리자'
    },
    {
      title: '시스템관리자',
      icon: 'bx:home',
      path: '/systemAdmin'
    }
  ]
}

export default navigation

frontend/src/navigation/vertical/user.ts

// ** Type import
import { VerticalNavItemsType } from 'src/@core/layouts/types'

const navigation = (): VerticalNavItemsType => {
  return [
    {
      sectionTitle: '사용자'
    },
    {
      title: '사용자',
      icon: 'bx:home',
      path: '/user'
    }
  ]
}

export default navigation

컴포넌트 수정

frontend/src/layouts/UserLayout.tsx

import { useAuth } from 'src/hooks/useAuth'

import VerticalNavItemsForSystemAdmin from 'src/navigation/vertical/system-admin'
import VerticalNavItemsForAdmin from 'src/navigation/vertical/admin'
import VerticalNavItemsForUser from 'src/navigation/vertical/user'


const UserLayout = ({ children, contentHeightFixed }: Props) => {

  ...
  
  const { user } = useAuth()
  
  ...
  
  let menu
  if (user.role === 'SYSTEM_ADMIN') {
    menu = VerticalNavItemsForSystemAdmin()
  } else if (user.role === 'ADMIN') {
    menu = VerticalNavItemsForAdmin()
  } else if (user.role === 'USER') {
    menu = VerticalNavItemsForUser()
  }
  
  ...

  return (  
    <Layout
          hidden={hidden}
          settings={settings}
          saveSettings={saveSettings}
          contentHeightFixed={contentHeightFixed}
          verticalLayoutProps={{
            navMenu: {
              navItems: menu

위와 같이 수정하는 경우 User Context의 권한값을 확인하여 출력되는 메뉴가 분기되어 출력됩니다.

Last updated