하석형 하석형 04-23
Merge branch 'master' of http://210.180.118.83/jhpark/cms_frontend
@44075d812c5f68ee1b2e22d206623ce923b607b4
client/resources/api/index.js
--- client/resources/api/index.js
+++ client/resources/api/index.js
@@ -69,8 +69,6 @@
         sessionStorage.setItem("redirect", redirect);
         alert('세션이 종료 되었습니다.\n로그인을 새로 해주세요.');
         store.commit("setStoreReset");
-        //refresh 쿠키 삭제
-        document.cookie = "refresh=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
         window.location = '/login.page';
         return Promise.reject(refreshError);
       }
 
client/views/common/pageAuthMixin.js (added)
+++ client/views/common/pageAuthMixin.js
@@ -0,0 +1,17 @@
+
+export default {
+    computed: {
+      pageAuth() {
+        const vuex = JSON.parse(localStorage.getItem("vuex") || "{}");
+        return vuex?.pageAuth || {
+          inqAuthrt: 'N',
+          regAuthrt: 'N',
+          mdfcnAuthrt: 'N',
+          delAuthrt: 'N',
+          fileDwnldAuthrt: 'N',
+          regAuthrt: 'N',
+        };
+      }
+    }
+  };
+  (파일 끝에 줄바꿈 문자 없음)
client/views/component/userInfo/UserInfoView.vue
--- client/views/component/userInfo/UserInfoView.vue
+++ client/views/component/userInfo/UserInfoView.vue
@@ -236,7 +236,7 @@
       <button class="btn sm tertiary" @click="fnList">목록</button>
     </template>
       <button
-        v-if="pageAuth.mdfcnAuthrt == 'Y'"
+        v-if="pageAuth.mdfcnAuthrt === 'Y'"
         :class="{
           'btn sm main': true,
         }"
@@ -259,7 +259,7 @@
 
 // COMPONENT
 import UserAuthorList from "./UserAuthorList.vue";
-
+import pageAuthMixin from "../../common/pageAuthMixin.js";
 
 // API
 import { mbrDetailProc } from "../../../resources/api/mbrInfo";
@@ -267,6 +267,7 @@
 
 export default {
   components: { UserAuthorList },
+  mixins: [pageAuthMixin],
   props: {
     pageId: {
       type: String,
@@ -283,7 +284,7 @@
   data() {
     return {
       pageRole: this.$store.state.userType, // 유저 권한
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
+ //     pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
 
       mbrVO: {},
       showOpt: { ...defaultUserInfoParams }, // 유저정보 표시 여부 객체
client/views/index.js
--- client/views/index.js
+++ client/views/index.js
@@ -22,7 +22,7 @@
 async function initVueApp() {
   const savedLoginMode = localStorage.getItem("loginMode");
   if (savedLoginMode) {
-    store.commit("setLoginMode", savedLoginMode);
+    Store.commit("setLoginMode", savedLoginMode);
   }
 
   const router = await createAppRouter()
client/views/pages/App.vue
--- client/views/pages/App.vue
+++ client/views/pages/App.vue
@@ -32,11 +32,6 @@
       path: "",
     };
   },
-  created() { 
-    const loginMode = localStorage.getItem("loginMode");
-  if (loginMode) {
-    this.$store.commit("setLoginMode", loginMode);
-  }},
   methods: {},
   watch: {
     $route(to, from) {
client/views/pages/AppRouter.js
--- client/views/pages/AppRouter.js
+++ client/views/pages/AppRouter.js
@@ -104,10 +104,12 @@
     mdfcnAuthrt: 'N',     // 수정 권한
     delAuthrt: 'N',       // 삭제 권한
     fileDwnldAuthrt: 'N', // 파일 다운로드 권한
-  }
+  };
+
   if (!routeMeta || !routeMeta.authrt || routeMeta.authrt.length === 0) {
     return result;
   }
+
   routeMeta.authrt.forEach(auth => {
     if (userRoles.includes(auth.authrtCd)) {
       if (auth.inqAuthrt === 'Y') result.inqAuthrt = 'Y';
@@ -175,20 +177,13 @@
     // 로그인 상태 확인 (JWT 또는 SESSION)
     const isLogin = loginMode === 'J' ? store.state.authorization : store.state.mbrId;
     if (!isLogin && to.path !== filters.ctxPath('/login.page')) {
+      sessionStorage.setItem('redirect', to.fullPath); 
       next({ path: filters.ctxPath("/login.page") });
-      return;
+      return; 
     }
 
     // 접근 제어 확인
-    let accesCheck = false;
-    if (loginMode === 'J') {
-      // JWT 방식 접근 제어
-      accesCheck = await accessUrl(to.path);
-    } else if (loginMode === 'S') {
-      // 세션 방식 접근 제어 (세션이 유효한지 확인)
-      accesCheck = store.state.mbrId != null;
-    }
-    console.log('accesCheck', accesCheck);
+    const accesCheck = await accessUrl(to.path);
     const roleCheck = isValidRole();
     if (!accesCheck || !roleCheck) {
       alert('접근이 불가합니다.\n관리자에게 문의하세요.');
@@ -208,6 +203,7 @@
     }
     const mbrAuth = store.state.roles.map(auth => auth.authority); // 사용자 권한 정보
     const pageAuth = mergeAuth(mbrAuth, to.meta);
+    console.log("권한확인", to.meta);
     sessionStorage.setItem("redirect", to.fullPath);
     
     // 메인 페이지 or 로그인 페이지
client/views/pages/AppStore.js
--- client/views/pages/AppStore.js
+++ client/views/pages/AppStore.js
@@ -3,10 +3,13 @@
 import { logOutProc } from "../../resources/api/logOut"
 
 export default createStore({
-  plugins: [createPersistedState()],
+  plugins: [createPersistedState({
+    paths: ['loginMode', 'authorization', 'mbrId', 'mbrNm', 'roles', 'contextPath']
+  })],
   state: {
     authorization: null,
     // refresh: null,
+    loginMode: 'J',
     userType: "portal",
     menu: null,
     path: null,
@@ -19,6 +22,7 @@
     // getRefresh: function () {},
     getMbrNm: function () {},
     getRoles: function () {},
+    getLoginMode: state => state.loginMode,
   },
   mutations: {
     setAuthorization(state, newValue) {
@@ -48,6 +52,7 @@
     setStoreReset(state) {
       state.authorization = null;
       // state.refresh = null;
+      state.loginMode = 'J';
       state.mbrNm = null;
       state.mbrId = null;
       state.roles = [{authority: "ROLE_NONE"}];
@@ -63,7 +68,10 @@
     },
     setContextPath(state, ctx) {
       state.contextPath = ctx;
-    }
+    },
+    setLoginMode(state, value) {
+      state.loginMode = value;
+    },
   },
   actions: {
     async logout({ commit }) {
client/views/pages/adm/authority/authority/AuthoritySelectList.vue
--- client/views/pages/adm/authority/authority/AuthoritySelectList.vue
+++ client/views/pages/adm/authority/authority/AuthoritySelectList.vue
@@ -69,9 +69,9 @@
 import queryParams from "../../../../../resources/js/queryParams";
 import { toRaw } from "vue";
 import { defaultSearchParams } from "../../../../../resources/js/defaultSearchParams";
-
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 export default {
-  mixins: [queryParams],
+  mixins: [queryParams, pageAuthMixin],
   components: {
     ListTable: ListTable,
     PaginationButton: PaginationButton,
@@ -79,7 +79,7 @@
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+  //    pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       colgroup: ["4%", "20", "25%", "13%", "13%", "5%"],
       thead: ["NO", "권한코드", "권한명", "등록자", "등록일", "삭제"],
client/views/pages/adm/authority/authority/AuthoritySelectListOne.vue
--- client/views/pages/adm/authority/authority/AuthoritySelectListOne.vue
+++ client/views/pages/adm/authority/authority/AuthoritySelectListOne.vue
@@ -59,13 +59,15 @@
 <script>
 import queryParams from "../../../../../resources/js/queryParams";
 import { findByAuthrt, del, update } from "../../../../../resources/api/authrt";
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
+
 
 export default {
-  mixins: [queryParams],
+  mixins: [queryParams, pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+ //     pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       authrt: {}, // 권한 객체
       pageId: "",
client/views/pages/adm/authority/menuAuthority/MenuAuthority.vue
--- client/views/pages/adm/authority/menuAuthority/MenuAuthority.vue
+++ client/views/pages/adm/authority/menuAuthority/MenuAuthority.vue
@@ -110,11 +110,14 @@
   updateMenuAuthrtProc,
 } from "../../../../../resources/api/menuAuthor"; // 메뉴권한
 
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
+
 export default {
+  mixins: [pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+ //     pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       iconPath: mdiAccountKey,
       authorList: [], // 권한 목록
client/views/pages/adm/departmentManagement/DepartmentManagement.vue
--- client/views/pages/adm/departmentManagement/DepartmentManagement.vue
+++ client/views/pages/adm/departmentManagement/DepartmentManagement.vue
@@ -202,6 +202,7 @@
   updateListProc,
 } from "../../../../resources/api/dept";
 import Modal from "../../../component/modal/Modal.vue";
+import pageAuthMixin from "../../../common/pageAuthMixin.js";
 export default {
   components: {
     draggable: draggable,
@@ -210,10 +211,11 @@
     PaginationButton: PaginationButton,
     Modal: Modal,
   },
+  mixins: [pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+  //    pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       colgroup: ["5%", "15%", "20%", "20%", "20%"], // 부서관련 등록된 사용자 테이블 생성
       thead: ["선택", "아이디", "이름", "연락처", "이메일"], // 부서관련 등록된 사용자 테이블 생성
client/views/pages/adm/member/adminManagement/AdminManagementInsert.vue
--- client/views/pages/adm/member/adminManagement/AdminManagementInsert.vue
+++ client/views/pages/adm/member/adminManagement/AdminManagementInsert.vue
@@ -5,15 +5,16 @@
 <script>
 // COMPONENETS
 import UserInfoInsert from "../../../../component/userInfo/UserInfoInsert.vue";
-
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 export default {
   components: {
     UserInfoInsert,
   },
+  mixins: [pageAuthMixin],
   data() {
     return {
       pageId: this.$route.query.pageId, // 페이지 아이디
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
+ //     pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
     };
   },
 };
client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
--- client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
+++ client/views/pages/adm/member/adminManagement/AdminManagementSelectList.vue
@@ -79,9 +79,9 @@
 // API
 import { mbrListProc } from "../../../../../resources/api/mbrInfo";
 import { pswdResetProc } from "../../../../../resources/api/mbrInfo";
-
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 export default {
-  mixins: [queryParams],
+  mixins: [queryParams, pageAuthMixin],
   components: {
     ListTable: ListTable,
     PaginationButton: PaginationButton,
@@ -89,7 +89,7 @@
   },
   data() {
     return {
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
+   //   pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
 
       colgroup: ["5%", "19%", "19%", "15%", "10%", "8%"],
       thead: [
client/views/pages/adm/member/termsManagement/TermsManagementSelectList.vue
--- client/views/pages/adm/member/termsManagement/TermsManagementSelectList.vue
+++ client/views/pages/adm/member/termsManagement/TermsManagementSelectList.vue
@@ -47,11 +47,13 @@
 <script>
 import ListTable from "../../../../component/table/ListTable.vue";
 import PaginationButton from "../../../../component/pagination/PaginationButton.vue";
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 export default {
+  mixins: [pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+   //   pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       colgroup: ["5%", "19%", "19%", "15%", "10%", "8%"],
       thead: ["NO", "제목", "순서", "사용유무", "작성자", "작성일"],
client/views/pages/adm/member/termsManagement/TermsManagementSelectListOne.vue
--- client/views/pages/adm/member/termsManagement/TermsManagementSelectListOne.vue
+++ client/views/pages/adm/member/termsManagement/TermsManagementSelectListOne.vue
@@ -57,11 +57,13 @@
 </template>
 
 <script>
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 export default {
+  mixins: [pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+  //    pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       colgroup: ["5%", "50%", "15%", "15%", "15%"],
       thead: ["NO", "기업명", "대표자", "기업상태", "입주의향"],
client/views/pages/adm/member/userManagement/UserManagementInsert.vue
--- client/views/pages/adm/member/userManagement/UserManagementInsert.vue
+++ client/views/pages/adm/member/userManagement/UserManagementInsert.vue
@@ -5,15 +5,17 @@
 <script>
 // COMPONENETS
 import UserInfoInsert from "../../../../component/userInfo/UserInfoInsert.vue";
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 
 export default {
   components: {
     UserInfoInsert,
   },
+  mixins: [pageAuthMixin],
   data() {
     return {
       pageId: this.$route.query.pageId, // 페이지 아이디
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
+ //     pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
     };
   },
 };
client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
--- client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
+++ client/views/pages/adm/member/userManagement/UserManagementSelectList.vue
@@ -101,12 +101,12 @@
 import queryParams from "../../../../../resources/js/queryParams";
 import { insertProc } from "../../../../../resources/api/prvcInqHstry";
 import { defaultSearchParams } from "../../../../../resources/js/defaultSearchParams";
-
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 // API
 import { mbrListProc, pswdResetProc } from "../../../../../resources/api/mbrInfo";
 
 export default {
-  mixins: [queryParams],
+  mixins: [queryParams, pageAuthMixin],
   components: {
     Modal: Modal,
     ListTable: ListTable,
@@ -115,7 +115,7 @@
   },
   data() {
     return {
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
+   //   pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
 
       isOpen: false,
 
client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
--- client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
+++ client/views/pages/adm/menuManagement/menuManagement/MenuManagement.vue
@@ -188,12 +188,14 @@
 } from "../../../../../resources/api/menu";
 import { findAllByExpsr } from "../../../../../resources/api/contsType";
 import { findAllByMenuMng } from "../../../../../resources/api/bbsMng";
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 
 export default {
+  mixins: [pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+  //    pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       // 글 작성 모드
       // false - 없음 (기본)
client/views/pages/adm/menuManagement/menuSatisfactionManagement/MenuSatisfactionSelectList.vue
--- client/views/pages/adm/menuManagement/menuSatisfactionManagement/MenuSatisfactionSelectList.vue
+++ client/views/pages/adm/menuManagement/menuSatisfactionManagement/MenuSatisfactionSelectList.vue
@@ -65,10 +65,12 @@
     PaginationButton: PaginationButton,
     Modal: Modal,
   },
+  
+  mixins: [pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+   //   pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
       search: { ...defaultSearchParams },
       satisfaction: false,
       colgroup: ["30%", "10%", "10%", "10%", "10%", "10%", "10%", "10%"],
client/views/pages/adm/popup/PopupManagementSelectListOne.vue
--- client/views/pages/adm/popup/PopupManagementSelectListOne.vue
+++ client/views/pages/adm/popup/PopupManagementSelectListOne.vue
@@ -254,15 +254,18 @@
 
 <script>
 import { mdiClose, mdiTrayArrowDown } from "@mdi/js";
+import pageAuthMixin from "../../../common/pageAuthMixin.js";
 
 // API
 import { detailProc, deleteProc } from "../../../../resources/api/popup";
 
 export default {
+
+  mixins: [pageAuthMixin],
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+ //     pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       path: mdiClose,
       downPath: mdiTrayArrowDown,
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectList.vue
@@ -53,20 +53,20 @@
 import { toRaw } from "vue";
 import queryParams from "../../../../../resources/js/queryParams";
 import { defaultSearchParams } from "../../../../../resources/js/defaultSearchParams";
-
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 
 // API
 import { findAll } from "../../../../../resources/api/contsType";
 
 export default {
-  mixins: [queryParams],
+  mixins: [queryParams, pageAuthMixin],
   components: {
     ListTable: ListTable,
     PaginationButton: PaginationButton,
   },
   data() {
     return {
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
+  //    pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
 
       colgroup: ["5%", "40%", "40%", "15%"],
       thead: ["번호", "콘텐츠 한글명", "콘텐츠 영문명", "메뉴노출"],
client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
--- client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
+++ client/views/pages/adm/preferences/contentTypeManagement/ContentTypeManagementSelectListOne.vue
@@ -116,12 +116,16 @@
   deleteProc,
 } from "../../../../../resources/api/contsType";
 
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
+
 
 export default {
+  
+  mixins: [pageAuthMixin],
   data() {
     return {
       pageId: this.$route.query.pageId, // 페이지 아이디
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
+   //   pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth, // 페이지 권한
 
       contsTypeVO: {},
     };
client/views/pages/adm/statistics/BbsStatistics.vue
--- client/views/pages/adm/statistics/BbsStatistics.vue
+++ client/views/pages/adm/statistics/BbsStatistics.vue
@@ -109,16 +109,16 @@
 
 // API
 import { selectBbsCntnStatsProc } from "../../../../resources/api/cntnStats";
-
+import pageAuthMixin from "../../../common/pageAuthMixin.js";
 export default {
-  mixins: [statisticsDate],
+  mixins: [statisticsDate, pageAuthMixin],
   components: {
     ClusteredBarChart: ClusteredBarChart,
   },
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+  //    pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
       // 차트 데이터
       chartData: [],
       // 전체 수
client/views/pages/adm/statistics/MenuStatistics.vue
--- client/views/pages/adm/statistics/MenuStatistics.vue
+++ client/views/pages/adm/statistics/MenuStatistics.vue
@@ -109,16 +109,17 @@
 
 // API
 import { selectMenuCntnStatsProc } from "../../../../resources/api/cntnStats";
+import pageAuthMixin from "../../../common/pageAuthMixin.js";
 
 export default {
-  mixins: [statisticsDate],
+  mixins: [statisticsDate, pageAuthMixin],
   components: {
     ClusteredBarChart: ClusteredBarChart,
   },
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+   //   pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
       // 차트 데이터
       chartData: [],
       // 전체 수
client/views/pages/adm/statistics/UserStatistics.vue
--- client/views/pages/adm/statistics/UserStatistics.vue
+++ client/views/pages/adm/statistics/UserStatistics.vue
@@ -108,16 +108,17 @@
 
 // API
 import { selectUserCntnStatsProc } from "../../../../resources/api/cntnStats";
+import pageAuthMixin from "../../../common/pageAuthMixin.js";
 
 export default {
-  mixins: [statisticsDate],
+  mixins: [statisticsDate, pageAuthMixin],
   components: {
     ClusteredColumnChart: ClusteredColumnChart,
   },
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+   //   pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
       // 차트 데이터
       chartData: [],
       // 전체 수
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectList.vue
@@ -55,7 +55,7 @@
     <button
       class="btn sm main"
       @click="fnAdd"
-      v-if="pageAuth.regAuthrt == 'Y'"
+      v-if="pageAuth.regAuthrt === 'Y'"
     >
       등록
     </button>
@@ -69,10 +69,10 @@
 import { toRaw } from "vue";
 import queryParams from "../../../../../resources/js/queryParams";
 import { defaultSearchParams } from "../../../../../resources/js/defaultSearchParams";
-
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 
 export default {
-  mixins: [queryParams],
+  mixins: [queryParams, pageAuthMixin],
   components: {
     ListTable: ListTable,
     PaginationButton: PaginationButton,
@@ -80,7 +80,7 @@
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+//      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       colgroup: ["5%", "50%", "15%", "15%", "15%"],
       thead: ["NO", "경로", "제어IP", "유형", "등록일"],
client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
--- client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
+++ client/views/pages/adm/system/networkAccessControl/NetworkAccessControlSelectListOne.vue
@@ -47,15 +47,16 @@
 <script>
 import { findByAcces, del } from "../../../../../resources/api/accesCtrl";
 import queryParams from "../../../../../resources/js/queryParams";
+import pageAuthMixin from "../../../../common/pageAuthMixin.js";
 
 export default {
-  mixins: [queryParams],
+  mixins: [queryParams, pageAuthMixin],
   components: {
   },
   data() {
     return {
       // 페이지 권한 객체
-      pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
+ //     pageAuth: JSON.parse(localStorage.getItem("vuex")).pageAuth,
 
       accesCtrl: {},
       pageId: "",
client/views/pages/login/Login.vue
--- client/views/pages/login/Login.vue
+++ client/views/pages/login/Login.vue
@@ -108,6 +108,7 @@
               // JWT 방식
               store.commit("setAuthorization", res.headers.authorization);
               store.commit("setLoginMode", "J");
+              localStorage.setItem("loginMode", "J");
               const base64String = store.state.authorization.split(".")[1];
               const base64 = base64String.replace(/-/g, "+").replace(/_/g, "/");
               const jsonPayload = decodeURIComponent(
@@ -120,18 +121,19 @@
               store.commit("setMbrNm", mbr.mbrNm);
               store.commit("setRoles", mbr.roles);
           } else if (loginType === 'S') {
-              // 세션 방식 (서버에서 따로 body에 사용자 정보 내려줘야 함)
               store.commit("setLoginMode", "S");
+              localStorage.setItem("loginMode", "S");
               const mbr = res.data;
               store.commit("setAuthorization", null);
               store.commit("setMbrId", mbr.mbrId);
               store.commit("setMbrNm", mbr.mbrNm);
-              store.commit("setRoles", mbr.roles);
+              const roles = mbr.roles.map(r => ({ authority: r.authrtCd }));
+              store.commit("setRoles", roles);
           } else {
               alert("알 수 없는 로그인 방식입니다.");
               return;
           }
-
+          const isAdmin = store.state.roles.some(role => role.authority === "ROLE_ADMIN");
           let url = this.restoreRedirect("redirect");
           if (url != null && url != "") {
             const ctx = store.state.contextPath;
@@ -142,14 +144,21 @@
               // redirect 값에서 기존 Context Path 제거
               url = url.replace(/^\/[^\/]+/, ""); // 첫 번째 '/' 이후의 경로만 남김
             }
+            const routeExists = this.$router.getRoutes().some(route => route.path === url);
             
             if (url == this.$filters.ctxPath("/searchId.page") || url == this.$filters.ctxPath("/resetPswd.page")) {
-              this.$router.push({ path: this.$filters.ctxPath("/main.page") });
-            } else {
-              this.$router.push({ path: url });
-            }
+                this.$router.push({ path: this.$filters.ctxPath("/main.page") });
+              } else if (routeExists) {
+                this.$router.push({ path: url });
+              } else {
+                this.$router.push({
+                  path: isAdmin ? this.$filters.ctxPath("/adm/main.page") : this.$filters.ctxPath("/")
+                });
+              }
           } else {
-            this.$router.push({ path: this.$filters.ctxPath("/") });
+            this.$router.push({
+                path: isAdmin ? this.$filters.ctxPath("/adm/main.page") : this.$filters.ctxPath("/")
+              });
           }
 
           
Add a comment
List