67 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
import { createWebHistory, createRouter } from 'vue-router';
 | 
						|
 | 
						|
const routes = [
 | 
						|
    { path: '/', name: 'Home', component: () => import('./views/Dashboard.vue') },
 | 
						|
    { path: '/dashboard', name: 'dashboard', component: () => import('./views/Dashboard.vue') },
 | 
						|
    { path: '/devices', name: 'devices', component: () => import('./views/Devices.vue') },
 | 
						|
    { path: '/devices/status/:id', name: 'devices-status', component: () => import('./views/Devices.vue') },
 | 
						|
    { path: '/devices/tag/:id', name: 'devices-tag', component: () => import('./views/Devices.vue') },
 | 
						|
    { path: '/devices/category/:id', name: 'devices-category', component: () => import('./views/Devices.vue') },
 | 
						|
    { path: '/device/view/:id', component: () => import('./views/DevicesViews/DeviceView.vue'), props: true },
 | 
						|
    { path: '/device/view/configs/:id', component: () => import('./views/DevicesViews/DeviceConfigs.vue'), props: true },
 | 
						|
    { path: '/device/view/configs/view-config/:id', component: () => import('./views/DevicesViews/DeviceViewConfig.vue') },
 | 
						|
    { path: '/device/view/eventlog/:id', component: () => import('./views/DevicesViews/DeviceEventLog.vue'), props: true },
 | 
						|
 | 
						|
    { path: '/scheduled-tasks', name: 'scheduled-tasks', component: () => import('./views/Tasks.vue') },
 | 
						|
    { path: '/templates', name: 'templates', component: () => import('./views/Templates.vue') },
 | 
						|
    { path: '/categories', name: 'categories', component: () => import('./views/Categorys.vue') },
 | 
						|
    { path: '/commands', name: 'commands', component: () => import('./views/Commands.vue') },
 | 
						|
    { path: '/tags', name: 'tags', component: () => import('./views/Tags.vue') },
 | 
						|
    { path: '/tags/:id', name: 'tags-id', component: () => import('./views/Tags.vue') },
 | 
						|
    { path: '/vendors', name: 'vendors', component: () => import('./views/Vendors.vue') },
 | 
						|
    { path: '/config-search', name: 'config-search', component: () => import('./views/ConfigSearch.vue') },
 | 
						|
    { path: '/config-reports', name: 'config-reports', component: () => import('./views/ConfigReports.vue') },
 | 
						|
 | 
						|
    // Settings
 | 
						|
    {
 | 
						|
        path: '/settings/',
 | 
						|
        name: 'settings',
 | 
						|
        component: () => import('./views/Settings.vue'),
 | 
						|
        beforeEnter: guardMyroute,
 | 
						|
        children: [
 | 
						|
            { path: '/settings/overview', name: 'overview', component: () => import('./views/SettingsTabs/0Overview.vue') },
 | 
						|
            { path: '/settings/system', name: 'system', component: () => import('./views/SettingsTabs/1System.vue') },
 | 
						|
            { path: '/settings/security', name: 'security', component: () => import('./views/SettingsTabs/4Security.vue') },
 | 
						|
            { path: '/settings/about', name: 'about', component: () => import('./views/SettingsTabs/10About.vue') }
 | 
						|
        ]
 | 
						|
    },
 | 
						|
 | 
						|
    { path: '/settings/users/:userId?', name: 'users', component: () => import('./views/Users.vue'), beforeEnter: guardMyroute },
 | 
						|
    { path: '/settings/activitylog', name: 'activitylog', component: () => import('./views/ActivityLog.vue'), beforeEnter: guardMyroute },
 | 
						|
 | 
						|
    /* PAGENOTFOUND */
 | 
						|
    { path: '/:catchAll(.*)', component: () => import('./views/PageNotFound.vue') }
 | 
						|
];
 | 
						|
 | 
						|
const router = createRouter({
 | 
						|
    history: createWebHistory(),
 | 
						|
    routes,
 | 
						|
    linkActiveClass: 'linkActiveClass-active-link',
 | 
						|
    linkExactActiveClass: 'linkExactActiveClass-exact-active pf-m-current'
 | 
						|
});
 | 
						|
 | 
						|
export default router;
 | 
						|
 | 
						|
//https://medium.com/js-dojo/how-to-implement-route-guard-in-vue-js-9929c93a13db
 | 
						|
function guardMyroute(to, from, next) {
 | 
						|
    let userRole = document.querySelector("meta[name='user-role']").getAttribute('content');
 | 
						|
    var isAuthenticated = false;
 | 
						|
    if (userRole === 'Admin') isAuthenticated = true;
 | 
						|
    else isAuthenticated = false;
 | 
						|
    if (isAuthenticated) {
 | 
						|
        next(); // allow to enter route
 | 
						|
    } else {
 | 
						|
        next('/dashboard'); // go to '/login';
 | 
						|
    }
 | 
						|
}
 |