From e3d93ca713b11ec7c88d8439528e25828398b7cb Mon Sep 17 00:00:00 2001 From: "DESKTOP-1R2VSQH\\Lenovo ThinkPad E490" Date: Fri, 20 Jun 2025 17:36:46 +0700 Subject: [PATCH] fix ==> redirectToLink --- src/modules/01_metadata/router.ts | 10 +++++++ src/modules/02_users/router.ts | 10 +++++++ src/modules/03_logs/router.ts | 1 + src/modules/04_system/router.ts | 1 + src/modules/05_command/router.ts | 2 ++ src/modules/06_webservices/router.ts | 1 + src/plugins/auth.ts | 44 +++++++++++++++++++++------- src/plugins/http.ts | 6 ++-- src/router/index.ts | 2 +- src/views/MainLayout.vue | 13 ++++++-- src/views/auth.vue | 7 +++-- 11 files changed, 80 insertions(+), 17 deletions(-) diff --git a/src/modules/01_metadata/router.ts b/src/modules/01_metadata/router.ts index e2b5655b..d98de616 100644 --- a/src/modules/01_metadata/router.ts +++ b/src/modules/01_metadata/router.ts @@ -48,6 +48,7 @@ export default [ name: "masterPersonal", component: personalPage, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -56,6 +57,7 @@ export default [ name: "masterPersonalDistrict", component: personalDistrict, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -64,6 +66,7 @@ export default [ name: "masterPersonalSubDistrict", component: personalSubDistrict, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -74,6 +77,7 @@ export default [ name: "masterPosition", component: positionPage, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -82,6 +86,7 @@ export default [ name: "masterPositionLevel", component: positionLevelPage, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -92,6 +97,7 @@ export default [ name: "masterPositionEmployee", component: positionEmployeePage, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -100,6 +106,7 @@ export default [ name: "masterPositionEmployeeLevel", component: positionEmployeeLevelPage, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -110,6 +117,7 @@ export default [ name: "masterCalendarWork", component: calendarWorkPage, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -120,6 +128,7 @@ export default [ name: "masterInsigniaPage", component: masterInsignia, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -128,6 +137,7 @@ export default [ name: "masterInsigniadetail", component: detailInsignia, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, diff --git a/src/modules/02_users/router.ts b/src/modules/02_users/router.ts index 958a2b80..98032b6f 100644 --- a/src/modules/02_users/router.ts +++ b/src/modules/02_users/router.ts @@ -1,3 +1,5 @@ +import Auth from "@/views/auth.vue"; + /** user*/ const ListsPageUser = () => import("@/modules/02_users/views/01_user.vue"); const PageManagementRole = () => @@ -31,6 +33,7 @@ export default [ name: "manageUsers", component: ListsPageUser, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, @@ -39,6 +42,7 @@ export default [ name: "manageUsersRolesId", component: PageManagementRole, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, @@ -47,6 +51,7 @@ export default [ name: "manageRoles", component: ListsPageRole, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, @@ -56,6 +61,7 @@ export default [ name: "manageRolesId", component: ListsPage2Role, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, @@ -65,6 +71,7 @@ export default [ name: "managePermission", component: PermissionPage, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, @@ -74,6 +81,7 @@ export default [ name: "roleOrganization", component: roleOrgview, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, @@ -82,6 +90,7 @@ export default [ name: "rolePositionSalary", component: rolePositionSalary, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, @@ -91,6 +100,7 @@ export default [ name: "responsibilities", component: responsIbilitiesView, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, diff --git a/src/modules/03_logs/router.ts b/src/modules/03_logs/router.ts index 9b5725a1..1de7cec3 100644 --- a/src/modules/03_logs/router.ts +++ b/src/modules/03_logs/router.ts @@ -6,6 +6,7 @@ export default [ name: "viewLogs", component: ListsPage, meta: { + Auth: true, Role: ["SUPER_ADMIN", "ADMIN"], }, }, diff --git a/src/modules/04_system/router.ts b/src/modules/04_system/router.ts index a4d93927..a9d1713f 100644 --- a/src/modules/04_system/router.ts +++ b/src/modules/04_system/router.ts @@ -6,6 +6,7 @@ export default [ name: "viewSystem", component: MainView, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, diff --git a/src/modules/05_command/router.ts b/src/modules/05_command/router.ts index 103bd574..6f63549d 100644 --- a/src/modules/05_command/router.ts +++ b/src/modules/05_command/router.ts @@ -8,6 +8,7 @@ export default [ name: "commandTemplate", component: ListsPage, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, @@ -16,6 +17,7 @@ export default [ name: "salaryTemplate", component: SalaryTemplate, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, diff --git a/src/modules/06_webservices/router.ts b/src/modules/06_webservices/router.ts index 8d7577c6..ed15cd5a 100644 --- a/src/modules/06_webservices/router.ts +++ b/src/modules/06_webservices/router.ts @@ -6,6 +6,7 @@ export default [ name: "manageWebservices", component: mainView, meta: { + Auth: true, Role: ["SUPER_ADMIN"], }, }, diff --git a/src/plugins/auth.ts b/src/plugins/auth.ts index 9d95e775..bfa2cb01 100644 --- a/src/plugins/auth.ts +++ b/src/plugins/auth.ts @@ -1,6 +1,7 @@ const ACCESS_TOKEN = "BMAHRISADM_KEYCLOAK_IDENTITY"; const key_C_Config = { url_Logout: import.meta.env.VITE_URL_SSO, + landing_PageUrl: import.meta.env.VITE_URL_LANDING, }; interface AuthResponse { access_token: string; @@ -10,22 +11,32 @@ interface AuthResponse { const authenticated = async () => ((await getToken()) ? true : false); -async function setAuthen(r: AuthResponse, val: string) { - await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in); - setCookie("SSO", val, r.expires_in); - window.location.href = "/"; +async function setAuthen(r: AuthResponse, val: string, url?: string) { + if (r && r.access_token) { + await setCookie(ACCESS_TOKEN, r.access_token, r.expires_in); + setCookie("SSO", val, r.expires_in); + window.location.href = url ? encodeURI(url) : "/"; + } } -async function logout() { - await deleteCookie(ACCESS_TOKEN); - window.location.href = key_C_Config.url_Logout; +async function logout(force: boolean = false) { + if (!force) { + await deleteCookie(ACCESS_TOKEN); + window.location.href = key_C_Config.url_Logout; + } else { + const currentUrl = window.location.href; + const loginUrl = `${ + key_C_Config.landing_PageUrl + }?system=admin&redirectUrl=${encodeURIComponent(currentUrl)}`; + window.location.href = loginUrl; + } } async function getToken() { return getCookie(ACCESS_TOKEN); } // 2024-08-29T02:55:13.000Z -function setCookie(name: string, value: any, time: number) { +async function setCookie(name: string, value: any, time: number) { let expires = ""; if (time) { const date = new Date(); @@ -47,7 +58,7 @@ function getCookie(name: string) { return null; } -function deleteCookie(name: string) { +async function deleteCookie(name: string) { document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; } @@ -71,4 +82,17 @@ async function tokenParsed() { return JSON.parse(jsonPayload); } -export { getToken, authenticated, logout, setAuthen, tokenParsed, getCookie }; +async function redirectToLandingPage() { + await deleteCookie(ACCESS_TOKEN); + window.location.href = key_C_Config.landing_PageUrl; +} + +export { + getToken, + authenticated, + logout, + setAuthen, + tokenParsed, + getCookie, + redirectToLandingPage, +}; diff --git a/src/plugins/http.ts b/src/plugins/http.ts index 44979c20..321aaff8 100644 --- a/src/plugins/http.ts +++ b/src/plugins/http.ts @@ -33,9 +33,11 @@ http.interceptors.response.use( function (error: any) { if (typeof error !== undefined) { // eslint-disable-next-line no-prototype-builtins + if (error.hasOwnProperty("response")) { - if (error.response.status === 401 || error.response.status === 403) { - logout(); + if (error.response.status === 403) { + window.location.href = "/error"; + // logout(true); // Store.commit("SET_ERROR_MESSAGE", error.response.data.message); // Store.commit("REMOVE_ACCESS_TOKEN") } diff --git a/src/router/index.ts b/src/router/index.ts index 32831ea0..52bcf737 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -95,7 +95,7 @@ router.beforeEach(async (to, from, next) => { if (to.meta.Auth) { const checkAuthen = await authenticated(); if (!checkAuthen && to.meta.Auth) { - logout(); + logout(true); return; } } diff --git a/src/views/MainLayout.vue b/src/views/MainLayout.vue index 87386a4a..2a49f944 100644 --- a/src/views/MainLayout.vue +++ b/src/views/MainLayout.vue @@ -6,7 +6,12 @@ import { useQuasar } from "quasar"; import { useRoute } from "vue-router"; import config from "@/app.config"; import http from "@/plugins/http"; -import { logout, tokenParsed, getCookie } from "@/plugins/auth"; +import { + logout, + tokenParsed, + getCookie, + redirectToLandingPage, +} from "@/plugins/auth"; import checkPermission from "@/plugins/checkPermission"; import { useCounterMixin } from "@/stores/mixin"; import { useDataStore } from "@/stores/data"; @@ -627,7 +632,11 @@ onUnmounted(() => { --> - + import { onMounted } from "vue"; import { useRoute } from "vue-router"; - import { setAuthen } from "@/plugins/auth"; const route = useRoute(); @@ -13,7 +12,11 @@ onMounted(async () => { expires_in: route.query.expires ? route.query.expires : 36000, refresh_token: route.query.accessToken, }; - setAuthen(params, "y"); + setAuthen( + params, + "y", + route.query.redirectUrl ? (route.query.redirectUrl as string) : "/" + ); } });