From 736071ee580d7297303f30fc2344ae6baf8edf9a Mon Sep 17 00:00:00 2001 From: Saladin21 <13519187@std.stei.itb.ac.id> Date: Sun, 17 Apr 2022 21:03:28 +0700 Subject: [PATCH] route protetion, not found page --- src/components/header.vue | 1 + src/router/index.js | 57 ++++++++++++++++++++++++++------ src/views/Login.vue | 2 +- src/views/NotFound.vue | 66 +++++++++++++++++++++++++++++++++++++ src/views/Test.vue | 68 --------------------------------------- 5 files changed, 116 insertions(+), 78 deletions(-) create mode 100644 src/views/NotFound.vue delete mode 100644 src/views/Test.vue diff --git a/src/components/header.vue b/src/components/header.vue index 883f277..11b76e7 100644 --- a/src/components/header.vue +++ b/src/components/header.vue @@ -108,6 +108,7 @@ export default { // console.log(b) localStorage.removeItem("token"); console.log('token removed') + window.location.reload() }, getProfile(){ HTTP.get("users/profile").then((res)=>{ diff --git a/src/router/index.js b/src/router/index.js index b7abd14..832bff2 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -16,20 +16,23 @@ import KpiIndex from "../views/KpiIndex.vue"; import KpiDetail from "../views/KpiDetail.vue"; import KpiCreate from "../views/KpiCreate.vue"; import KpiManagerDetail from "../views/KpiManagerDetail.vue"; -import Test from "../views/Test.vue"; +import NotFound from "../views/NotFound.vue"; import ManagerKpiIndex from "../views/ManagerKpiIndex.vue"; import ManagerKaryawanIndex from "../views/ManagerKaryawanIndex.vue"; import ManagerKaryawanDetail from "../views/ManagerKaryawanDetail.vue"; import ResponseIndex from "../views/ResponseIndex.vue"; import ResponseDetail from "../views/ResponseDetail.vue"; import ResponseEmployee from "../views/ResponseEmployee.vue"; +import { HTTP } from '../http-common' + +const adminRoute = ['Login', 'profil-admin', 'change-pass', 'User', 'Admin', 'KaryawanInsert', 'Departemen', 'KaryawanEdit', 'KaryawanDetail', 'AdminInsert', 'AdminEdit'] +const empRoute = ['Login', 'profil-user', 'change-pass', 'kpiIndex', 'KpiDetail', 'KpiResponses', 'ResponseEmployee', 'KpiCreate', 'KpiManagerDetail', 'ManagerkpiIndex', 'ManagerkaryawanIndex', 'ManagerKaryawanDetail', 'ResponseIndex', 'ResponseDetail'] const routes = [ - // { - // path: "/", - // name: "Home", - // component: Login, - // }, + { + path: "/", + redirect: "/login" + }, { path: "/login", name: "Login", @@ -148,9 +151,9 @@ const routes = [ component: ResponseDetail }, { - path: "/test", - name: "test", - component: Test, + path: "/:catchAll(.*)", + name: "NotFound", + component: NotFound, }, ]; @@ -159,4 +162,40 @@ const router = createRouter({ routes, }); +router.beforeEach((to,from, next)=>{ + if (to.name != "Login" && to.name != "NotFound"){ + HTTP.get("users/profile").then((res)=>{ + let isAdmin = res.data.data.is_admin + if (isAdmin){ + if (adminRoute.includes(to.name)){ + next() + }else{ + next("/forbidden") + } + }else{ + if (empRoute.includes(to.name)){ + next() + }else{ + next("/forbidden") + } + } + }).catch(()=>{ + next("/login") + }) + }else if (to.name != "NotFound"){ + HTTP.get("users/profile").then((res)=>{ + if (res.data.data.is_admin){ + next("/user") + }else{ + next("/kpi") + } + }).catch(()=>{ + next() + }) + }else{ + next() + } + +}) + export default router; diff --git a/src/views/Login.vue b/src/views/Login.vue index 69d6570..f1fbac3 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -110,7 +110,7 @@ export default { .then((response) => { localStorage.setItem("token", response.data.token) if (response.data.success) { - this.$router.push({ name: "User" }); + window.location.reload() } }) .catch(() => alert("username atau password salah")); diff --git a/src/views/NotFound.vue b/src/views/NotFound.vue new file mode 100644 index 0000000..3b00b25 --- /dev/null +++ b/src/views/NotFound.vue @@ -0,0 +1,66 @@ +<template> + <div class="d-flex align-items-center justify-content-center" style="height:100vh;"> + <div class="align-self-center justify-content-center"> + <h1 class="text-center" style=" + font-size: 100px;" >404</h1> + <h3 class="text-center" style=" + font-size: 50px;" >Not Found</h3> + <div + id="logo" + class="d-flex flex-row justify-content-start align-items-center illustration" + > + <i class="icon ion-ios-navigate" style="font-size: 73px"></i> + <p + class="text-center" + style=" + font-size: 40px; + padding: 0; + width: 115px; + margin-top: 16px; + margin-left: 2px; + font-family: nunito; + font-weight: bold; + " + > + simkpi + </p> + </div> + </div> + </div> +</template> + +<script> + + +export default { + name: "NotFound", + components: { + }, +} +</script> + +<style scoped> +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + min-height: 100vh; + background-color: #fff; +} + +.illustration { + text-align: center; + padding: 0 0 20 20px; + font-size: 100px; + color: rgb(244, 71, 107); +} + +#logo { + margin-left: 30px; +} + + +</style> \ No newline at end of file diff --git a/src/views/Test.vue b/src/views/Test.vue deleted file mode 100644 index 0c051c1..0000000 --- a/src/views/Test.vue +++ /dev/null @@ -1,68 +0,0 @@ -<template> - <div class="container-fluid"> - <div class="row flex-nowrap"> - <Sidebar current_page = "About"></Sidebar> - <div class="col ps-md-2 pt-2"> - <Header></Header> - <input v-model="filter" type="text"> - <Table2 :endpoint="'kpis'" :columns="columns" :filter="filter" :filter_column="'name'" @edit-entry="print" @delete-entry="print" @detail-entry="print" ></Table2> - </div> - </div> - </div> -</template> - -<script> - -import Header from "../components/header" -import Sidebar from "../components/sidebar" -import Table2 from "../components/table-2"; - - -export default { - name: "Template", - components: { - Header, - Sidebar, - Table2 - }, - data(){ - return{ - filter: "", - columns: { - Id: { - name : "Id", - data : "id", - hidden : true, - clickable : false - }, - Nama: { - name : "Nama", - data : "name", - hidden : false, - clickable : true - }, - }, - } - }, - methods: { - print(id){ - console.log(id) - } - } -} -</script> - -<style scoped> -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - min-height: 100vh; - background-color: #fff; -} - - -</style> \ No newline at end of file -- GitLab