فهرست منبع

🐞 fix:修复从“同时使用了用户信息和权限判断”的页面退出登录时异常问题

preschooler 9 ماه پیش
والد
کامیت
9b290ae3ce
5فایلهای تغییر یافته به همراه15 افزوده شده و 9 حذف شده
  1. 2 1
      src/directives/permission/hasPermi.ts
  2. 2 1
      src/directives/permission/hasRole.ts
  3. 3 2
      src/store/modules/permission.ts
  4. 2 1
      src/utils/auth.ts
  5. 6 4
      src/utils/permission.ts

+ 2 - 1
src/directives/permission/hasPermi.ts

@@ -8,7 +8,8 @@ export function hasPermi(app: App<Element>) {
     const { wsCache } = useCache()
     const { wsCache } = useCache()
     const { value } = binding
     const { value } = binding
     const all_permission = '*:*:*'
     const all_permission = '*:*:*'
-    const permissions = wsCache.get(CACHE_KEY.USER).permissions
+    const userInfo = wsCache.get(CACHE_KEY.USER)
+    const permissions = userInfo?.permissions || []
 
 
     if (value && value instanceof Array && value.length > 0) {
     if (value && value instanceof Array && value.length > 0) {
       const permissionFlag = value
       const permissionFlag = value

+ 2 - 1
src/directives/permission/hasRole.ts

@@ -8,7 +8,8 @@ export function hasRole(app: App<Element>) {
     const { wsCache } = useCache()
     const { wsCache } = useCache()
     const { value } = binding
     const { value } = binding
     const super_admin = 'super_admin'
     const super_admin = 'super_admin'
-    const roles = wsCache.get(CACHE_KEY.USER).roles
+    const userInfo = wsCache.get(CACHE_KEY.USER)
+    const roles = userInfo?.roles || []
 
 
     if (value && value instanceof Array && value.length > 0) {
     if (value && value instanceof Array && value.length > 0) {
       const roleFlag = value
       const roleFlag = value

+ 3 - 2
src/store/modules/permission.ts

@@ -35,8 +35,9 @@ export const usePermissionStore = defineStore('permission', {
       return new Promise<void>(async (resolve) => {
       return new Promise<void>(async (resolve) => {
         // 获得菜单列表,它在登录的时候,setUserInfoAction 方法中已经进行获取
         // 获得菜单列表,它在登录的时候,setUserInfoAction 方法中已经进行获取
         let res: AppCustomRouteRecordRaw[] = []
         let res: AppCustomRouteRecordRaw[] = []
-        if (wsCache.get(CACHE_KEY.ROLE_ROUTERS)) {
-          res = wsCache.get(CACHE_KEY.ROLE_ROUTERS) as AppCustomRouteRecordRaw[]
+        const roleRouters = wsCache.get(CACHE_KEY.ROLE_ROUTERS)
+        if (roleRouters) {
+          res = roleRouters as AppCustomRouteRecordRaw[]
         }
         }
         const routerMap: AppRouteRecordRaw[] = generateRoute(res)
         const routerMap: AppRouteRecordRaw[] = generateRoute(res)
         // 动态路由,404一定要放到最后面
         // 动态路由,404一定要放到最后面

+ 2 - 1
src/utils/auth.ts

@@ -10,7 +10,8 @@ const RefreshTokenKey = 'REFRESH_TOKEN'
 // 获取token
 // 获取token
 export const getAccessToken = () => {
 export const getAccessToken = () => {
   // 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
   // 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
-  return wsCache.get(AccessTokenKey) ? wsCache.get(AccessTokenKey) : wsCache.get('ACCESS_TOKEN')
+  const accessToken = wsCache.get(AccessTokenKey)
+  return accessToken ? accessToken : wsCache.get('ACCESS_TOKEN')
 }
 }
 
 
 // 刷新token
 // 刷新token

+ 6 - 4
src/utils/permission.ts

@@ -12,8 +12,9 @@ export function checkPermi(value: string[]) {
     const { wsCache } = useCache()
     const { wsCache } = useCache()
     const permissionDatas = value
     const permissionDatas = value
     const all_permission = '*:*:*'
     const all_permission = '*:*:*'
-    const permissions = wsCache.get(CACHE_KEY.USER).permissions
-    const hasPermission = permissions.some((permission) => {
+    const userInfo = wsCache.get(CACHE_KEY.USER)
+    const permissions = userInfo?.permissions || []
+    const hasPermission = permissions.some((permission: string) => {
       return all_permission === permission || permissionDatas.includes(permission)
       return all_permission === permission || permissionDatas.includes(permission)
     })
     })
     return !!hasPermission
     return !!hasPermission
@@ -33,8 +34,9 @@ export function checkRole(value: string[]) {
     const { wsCache } = useCache()
     const { wsCache } = useCache()
     const permissionRoles = value
     const permissionRoles = value
     const super_admin = 'super_admin'
     const super_admin = 'super_admin'
-    const roles = wsCache.get(CACHE_KEY.USER).roles
-    const hasRole = roles.some((role) => {
+    const userInfo = wsCache.get(CACHE_KEY.USER)
+    const roles = userInfo?.roles || []
+    const hasRole = roles.some((role: string) => {
       return super_admin === role || permissionRoles.includes(role)
       return super_admin === role || permissionRoles.includes(role)
     })
     })
     return !!hasRole
     return !!hasRole