Я возвращаю тип пользователя во всех моих компонентах, но мне нужно добавить проверку его в мои маршруты, не знаю, как это сделать.
Код
Это мой файл route.js
, где маршруты, которые нужны пользователям для аутентификации, определены в meta
import Vue from "vue";
import VueRouter from 'vue-router';
import store from './store';
Vue.use(VueRouter);
const router = new VueRouter({
mode: "history",
routes: [
// ADMIN ROUTES
{
path: '/dashboard',
name: 'dashboard',
component: Dashboard,
meta: {
requiresAuth: true,
layout: 'admin'
}
},
]
});
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!store.getters.isLoggedIn) {
next({
name: 'login'
})
} else {
next()
}
} else {
next()
}
})
router.afterEach((to, from) => {
Vue.nextTick(() => {
document.title = to.pageTitle || 'CC';
});
});
export default router;
. Как видите, у меня есть requiresAuth: true,
, который позволяет только аутентифицированному пользователю получить доступ к этому маршруту, мне также нужно добавить другое значение, которое говорит if user type == admin
, что не все вошедшие в систему пользователи могут получить доступ к такому маршруту, но только администраторы.
Это моя информация о зарегистрированных пользователях, которая доступна во всех компонентах и включает type
значение
Вопрос
Как добавить тип пользователя в мета-маршруты?
Примечание
моим значением типа может быть одно из этих 3 условий
- admin (роль администратора)
- customer (любое роль другого пользователя)
- undefined (пользователь без назначенной роли)
Обновление
Забыли упомянуть, что во всех моих компонентах у меня также есть эта функция
beforeRouteEnter (to, from, next) {
const token = localStorage.getItem('access_token')
return token ? next() : next('/login')
},
Это просто проверка, если мой пользователь вошел в систему на основе сохраненного токена в localStorage
Обновление 2
Я также пытался получить свой тип пользователя в функции компонента, как показано ниже, но возвращается this.$store
не определено
beforeRouteEnter (to, from, next) {
if (this.$store.getters.loggedUser.type != 'admin') {
next({
name: 'home'
})
} else {
next()
}
}