21 lines
1.4 KiB
TypeScript
21 lines
1.4 KiB
TypeScript
import { createRouter, createWebHistory } from 'vue-router'
|
|
import App from './App.vue'
|
|
import { getCurrentUser } from './services/auth'
|
|
import type { UserRole } from './types/auth'
|
|
|
|
let role:UserRole|undefined
|
|
const router=createRouter({history:createWebHistory(),routes:[
|
|
{path:'/',component:App},
|
|
{path:'/login',component:()=>import('./views/LoginView.vue'),meta:{public:true}},
|
|
{path:'/register',component:()=>import('./views/RegisterView.vue'),meta:{public:true}},
|
|
{path:'/profile',component:()=>import('./views/ProfileView.vue')},
|
|
{path:'/settings',component:()=>import('./views/AccountSettingsView.vue')},
|
|
{path:'/indexes',component:()=>import('./views/IndexManagementView.vue'),meta:{role:'admin'}},
|
|
{path:'/reviews',component:()=>import('./views/KnowledgeReviewView.vue'),meta:{role:'admin'}},
|
|
{path:'/documents',component:()=>import('./views/DocumentManagementView.vue'),meta:{role:'admin'}},
|
|
{path:'/retrieval-exports',component:()=>import('./views/RetrievalExportView.vue'),meta:{role:'admin'}},
|
|
{path:'/admin',component:()=>import('./views/AdminView.vue'),meta:{role:'admin'}},
|
|
]})
|
|
router.beforeEach(async to=>{if(to.meta.public)return true;try{role=(await getCurrentUser()).role}catch{return {path:'/login',query:{redirect:to.fullPath}}}if(to.meta.role&&role!==to.meta.role)return {path:'/profile',query:{forbidden:'1'}};return true})
|
|
export default router
|