/** * Vue Router * * @library * * https://router.vuejs.org/en/ */ // Lib imports import Vue from 'vue' // import VueAnalytics from 'vue-analytics' import Router from 'vue-router' import Meta from 'vue-meta' import { TokenService } from '@/services' // Routes import paths from './paths' function route (options) { let path = options.path; let view = options.view; let name = options.name; let meta = (options.meta) ? options.meta : ''; return { name: name || view, path, meta, component: (resovle) => import( `@/views/${view}.vue` ).then(resovle) } } Vue.use(Router) // Create a new router const router = new Router({ mode: 'history', routes: paths.map(path => route(path)).concat([ { path: '*', redirect: '/dashboard' } ]), scrollBehavior (to, from, savedPosition) { if (savedPosition) { return savedPosition } if (to.hash) { return { selector: to.hash } } return { x: 0, y: 0 } } }) Vue.use(Meta) import {$hasRole} from '@/services/acl/role'; router.beforeEach((to, from, next) => { const isPublic = to.matched.some(record => record.meta.public); const onlyWhenLoggedOut = to.matched.some(record => record.meta.onlyWhenLoggedOut); const loggedIn = !!TokenService.getToken(); const roles = (to.meta && to.meta.roles) ? to.meta.roles : null; if (!isPublic && !loggedIn) { return next({ path:'/login', query: {redirect: to.fullPath} // Store the full path to redirect the user to after login }); } // Do not allow user to visit login page or register page if they are logged in if (loggedIn && onlyWhenLoggedOut && policy) { return next('/') } // Do not allow user to visit Pages then not access roles if (roles && !$hasRole(roles)) { return next('/') } next(); }); // Bootstrap Analytics // Set in .env // https://github.com/MatteoGabriele/vue-analytics // if (process.env.GOOGLE_ANALYTICS) { // Vue.use(VueAnalytics, { // id: process.env.GOOGLE_ANALYTICS, // router, // autoTracking: { // page: process.env.NODE_ENV !== 'development' // } // }) // } export default router