diff --git a/frontend/src/Root.vue b/frontend/src/Root.vue new file mode 100644 index 0000000..191c0a2 --- /dev/null +++ b/frontend/src/Root.vue @@ -0,0 +1,2 @@ + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts index c409869..ba5d6f8 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -1,5 +1,6 @@ import { createApp } from 'vue' import './style.css' import './enhancements.css' -import App from './App.vue' -createApp(App).mount('#app') +import Root from './Root.vue' +import router from './router' +createApp(Root).use(router).mount('#app') diff --git a/frontend/src/router.ts b/frontend/src/router.ts new file mode 100644 index 0000000..8866a6a --- /dev/null +++ b/frontend/src/router.ts @@ -0,0 +1,15 @@ +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:'/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 diff --git a/frontend/src/views/AdminView.vue b/frontend/src/views/AdminView.vue new file mode 100644 index 0000000..395510f --- /dev/null +++ b/frontend/src/views/AdminView.vue @@ -0,0 +1 @@ + diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue new file mode 100644 index 0000000..25422ae --- /dev/null +++ b/frontend/src/views/LoginView.vue @@ -0,0 +1 @@ + diff --git a/frontend/src/views/ProfileView.vue b/frontend/src/views/ProfileView.vue new file mode 100644 index 0000000..2faf2d1 --- /dev/null +++ b/frontend/src/views/ProfileView.vue @@ -0,0 +1 @@ + diff --git a/frontend/src/views/RegisterView.vue b/frontend/src/views/RegisterView.vue new file mode 100644 index 0000000..2ca52a5 --- /dev/null +++ b/frontend/src/views/RegisterView.vue @@ -0,0 +1 @@ +