vue-router check menu auth

HTML

<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<div id="app">
  <div>
    <label for="checkbox">접근 권한 : {{checked}}</label>
  </div>

  <router-link to="/" v-on:toggle="toggle">Home</router-link>
  <router-link to="/menu/1">Menu1</router-link>
  <router-link to="/menu/2" v-if="checked">Menu2</router-link>
  <router-link to="/menu/3">Menu3</router-link>

  <router-view></router-view>
</div>

<template id="home">
  <div>
    <div>
    접근 권한 설정 :
    <input type="checkbox" id="checkbox" v-model="checked" v-on:click="toggle"> 
    </div>
    <div>
    <br>
    Menu 1 : 메뉴 진입시 권한 체크 후 권한 없을 시 home 으로 redirect 시킴
    </div>
    <div>
    <br>
    Menu 2 : 권한 없을 시 Menu 자체를 렌더링 하지 않음.
    </div>
    <div>
    <br>
    Menu 3 : 권한 없을 시 다른 화면으로 전환 시킴.
    <br>
    사용자 동의를 받은 경우에만 진입을 허용하는 경우에 활용 가능.
    </div>
    <div>
    <br>
    ※ 해당 소스는 오직 접근 권한 체크만 하는 샘플로 인증 체크는 별개로 체크해야함.
    </div>
  </div>
</template>

<template id="menu">
  <div>
    <div>
    Menu {{ $route.params.id }} 진입 성공!!
    </div>
  </div>
</template>

<template id="menu3">
  <div>
    <div>
    Menu 3 진입 성공!!
    </div>
  </div>
</template>

<template id="redirect">
  <div>
    <div>
    Menu 화면 접근 권한이 없어서 다른 화면으로 이동 되었습니다.
    </div>
  </div>
</template>

JavaScript

var data = {
  checked: false
}

const bus = new Vue()

const Home = {
  template: '#home',
  data: function() {
    return data
  },
  methods: {
    toggle: function() {
      bus.$emit('toggle', this.checked)
    }
  }
}

const Menu = {
  template: '#menu'
}

const Menu3 = {
  template: '#menu3',
  beforeCreate: function() {
    // 여기서 동의 여부 체크 API 호출
    if (!data.checked) {
    	router.push('/redirect')
    }
  }
}

const Redirect = {
  template: '#redirect'
}

const router = new VueRouter({
  routes: [{
      path: '/',
      component: Home
    },
    {
      path: '/menu/3',
      component: Menu3
    },
    {
      path: '/menu/:id',
      component: Menu,
      beforeEnter: (to, from, next) => {
        // 여기서 메뉴 접근 권한 체크 API 호출
        if (data.checked) {
          next()
        } else {
          alert("접근 권한 없음!")
          next('/')
        }
      }
    },
    {
      path: '/redirect',
      component: Redirect
    }
  ]
})

const app = new Vue({
  el: '#app',
  router,
  data: data,
  methods: {
    toggle: function() {
      this.checked = !this.checked
    }
  }
})

bus.$on('toggle', function(checked) {
  app.checked = checked
})