2017-01-10 5 views
4

Мой индекс маршрута определяется как:VueJS 2, маршрутизатор охранник

{ path: '/', adminOnly: false, component: Main }, 

Есть ли способ получить доступ к свойству «adminOnly»?

Там, кажется, нет никакого способа сделать это в этом блоке кода:

routes.beforeEach((to, from, next) => { 
    console.log(to) 
    next(); 
}); 

Мои маршруты Файл:

import Vue from 'vue'; 
import VueRouter from 'vue-router'; 

import Main from '../components/Main.vue'; 
import About from '../components/About.vue'; 

const NotFoundException = { 
    template: '<div>Route Was Not Found</div>' 
}; 

Vue.use(VueRouter); 

const routes = new VueRouter({ 
    mode: 'history', 
    hashbang: false, 
    linkActiveClass: 'active', 
    base: '/jokes', 
    routes: [ 
     { path: '/', adminOnly: false, component: Main }, 
     { path: '/about', adminOnly: false, component: About }, 
     { path: '*', adminOnly: false, component: NotFoundException } 
    ] 
}); 
routes.mode = 'html5'; 

routes.beforeEach((to, from, next) => { 
    // CHECK IF ADMINONLY EXISTS 
    next(); 
}); 

export default routes; 

я получить решение, добавив подмешать в adminOnly.js который имеет следующий код: Но опять же, mixin должен быть добавлен к каждому компоненту, если я должен был перенаправить пользователя на страницу входа, если не admin. // Просто тест var isAdmin = false;

export default { 
     beforeRouteEnter (to, from, next) { 
      if(!isAdmin) { 
       next((vm) => { 
        vm.$router.push('/login'); 
       }); 
      } 
     } 
    } 

ответ

5

Да, есть лучший способ справиться с этим. Каждый объект маршрута может иметь поле meta. Просто оберните adminOnly свойство в мета объекта:

routes: [ 
     { path: '/', meta: { adminOnly: false }, component: Main }, 
     { path: '/about', meta: { adminOnly: false }, component: About }, 
     { path: '*', meta: { adminOnly: false }, component: NotFoundException } 
    ] 

Проверка маршрута прав администратора:

router.beforeEach((to, from, next) => { 
    if (to.matched.some(record => record.meta.adminOnly)) { 
    // this route requires auth, check if logged in 
    // if not, redirect to login page. 
    } 
} 

Для более пожалуйста, проверьте docs и я создал небольшой пример на jsFiddle

+0

У вас есть опечатка: 'запись .meta.requiresAuth' в 'beforeEach()' hook, должен быть 'record.meta.adminOnly' в этом случае. – branquito

+0

Пожалуйста, проверьте документы –

+0

В документах у них есть свойство с именем 'requireAuth' на метаобъекте, в то время как в вопросе OP здесь используется' adminOnly', так как это так, ваш крючок не будет работать. – branquito

 Смежные вопросы

  • Нет связанных вопросов^_^