From 7b8ce4e0ab61b855dc2453ae23011c2c9abfe44d Mon Sep 17 00:00:00 2001 From: yinbangzhong <zhongbangyin@126.com> Date: 星期二, 06 八月 2024 09:55:34 +0800 Subject: [PATCH] 权限菜单控制 --- src/store/modules/user/index.ts | 3 ++- src/utils/auth.ts | 11 ++++++++++- src/hooks/permission.ts | 23 +++++++++++++++++------ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/hooks/permission.ts b/src/hooks/permission.ts index 916e3ff..e86bfb7 100644 --- a/src/hooks/permission.ts +++ b/src/hooks/permission.ts @@ -1,5 +1,6 @@ -import { RouteLocationNormalized, RouteRecordRaw } from 'vue-router'; -import { useUserStore } from '@/store'; +import { RouteLocationNormalized, RouteRecordRaw } from "vue-router"; +import { useUserStore } from "@/store"; +import { getUserInfo, getUserResources } from "@/utils/auth"; export default function usePermission() { const userStore = useUserStore(); @@ -7,8 +8,18 @@ accessRouter(route: RouteLocationNormalized | RouteRecordRaw) { //閬嶅巻userStore.resource let isok = false; + let user = getUserResources(); + let jsonObject = {}; + let resurces: any; if (userStore.resources) { - userStore.resources.forEach(r => { + resurces = userStore.resources; + } else { + if (user) { + resurces = JSON.parse(user); + } + } + if (resurces) { + resurces.forEach(r => { if ((r.menuType == 0 || r.menuType == 3) && (route.name == r.component || route.path == r.component)) { isok = true; } @@ -24,13 +35,13 @@ } }, - findFirstPermissionRoute(_routers: any, role = 'admin') { + findFirstPermissionRoute(_routers: any, role = "admin") { const cloneRouters = [..._routers]; while (cloneRouters.length) { const firstElement = cloneRouters.shift(); if ( firstElement?.meta?.roles?.find((el: string[]) => { - return el.includes('*') || el.includes(role); + return el.includes("*") || el.includes(role); }) ) return { name: firstElement.name }; @@ -39,7 +50,7 @@ } } return null; - }, + } // You can add any rules you want }; } diff --git a/src/store/modules/user/index.ts b/src/store/modules/user/index.ts index ca37a8b..245684b 100644 --- a/src/store/modules/user/index.ts +++ b/src/store/modules/user/index.ts @@ -5,7 +5,7 @@ getUserInfo, LoginData, } from '@/api/user'; -import { setToken, clearToken,setUserInfo } from '@/utils/auth'; +import { setToken, clearToken,setUserInfo,setUserResources } from '@/utils/auth'; import { removeRouteListener } from '@/utils/route-listener'; import { UserState } from './types'; import useAppStore from '../app'; @@ -73,6 +73,7 @@ }; this.resources=res.data.resources; setUserInfo(JSON.stringify(userInfo)); + setUserResources(JSON.stringify(this.resources)) } catch (err) { clearToken(); throw err; diff --git a/src/utils/auth.ts b/src/utils/auth.ts index d3f72d2..c92c3cf 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -1,6 +1,7 @@ const TOKEN_KEY = 'token'; const Authorization = 'Authorization'; const UserInfo = 'userInfo'; +const UserResources='userResources' const isLogin = () => { return !!localStorage.getItem(TOKEN_KEY); @@ -35,4 +36,12 @@ localStorage.setItem(UserInfo, info); }; -export { isLogin, getToken, setToken, clearToken,getAuthorization, setAuthorization, getUserInfo, setUserInfo}; +const getUserResources = () => { + return localStorage.getItem(UserResources); +}; + +const setUserResources = (info: string) => { + localStorage.setItem(UserResources, info); +}; + +export { isLogin, getToken, setToken, clearToken,getAuthorization, setAuthorization, getUserInfo, setUserInfo,setUserResources,getUserResources}; -- Gitblit v1.8.0