fix(permission.ts): 超级管理员登录左侧菜单没有动态生成路由问题修复
This commit is contained in:
@@ -4,19 +4,22 @@ import {constantRoutes} from '@/router'
|
|||||||
import {listRoutes} from "@/api/system/menu";
|
import {listRoutes} from "@/api/system/menu";
|
||||||
import {defineStore} from "pinia";
|
import {defineStore} from "pinia";
|
||||||
import {store} from "@/store";
|
import {store} from "@/store";
|
||||||
|
|
||||||
const modules = import.meta.glob("../../views/**/**.vue");
|
const modules = import.meta.glob("../../views/**/**.vue");
|
||||||
export const Layout = () => import( '@/layout/index.vue')
|
export const Layout = () => import( '@/layout/index.vue')
|
||||||
|
|
||||||
const hasPermission = (roles: string[], route: RouteRecordRaw) => {
|
const hasPermission = (roles: string[], route: RouteRecordRaw) => {
|
||||||
if (route.meta && route.meta.roles) {
|
if (route.meta && route.meta.roles) {
|
||||||
|
if (roles.includes('ROOT')) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
return roles.some(role => {
|
return roles.some(role => {
|
||||||
if (route.meta?.roles !== undefined) {
|
if (route.meta?.roles !== undefined) {
|
||||||
return (route.meta.roles as string[]).includes(role);
|
return (route.meta.roles as string[]).includes(role);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} else {
|
|
||||||
return true
|
|
||||||
}
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
export const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
|
export const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
|
||||||
@@ -60,12 +63,7 @@ export const usePermissionStore = defineStore({
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
listRoutes().then(response => {
|
listRoutes().then(response => {
|
||||||
const asyncRoutes = response.data
|
const asyncRoutes = response.data
|
||||||
let accessedRoutes
|
let accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
|
||||||
if (roles.includes('ROOT')) { // 超级管理员拥有全部权限
|
|
||||||
accessedRoutes = asyncRoutes || []
|
|
||||||
} else {
|
|
||||||
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
|
|
||||||
}
|
|
||||||
this.setRoutes(accessedRoutes)
|
this.setRoutes(accessedRoutes)
|
||||||
resolve(accessedRoutes)
|
resolve(accessedRoutes)
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
@@ -75,6 +73,7 @@ export const usePermissionStore = defineStore({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
export function usePermissionStoreHook() {
|
export function usePermissionStoreHook() {
|
||||||
return usePermissionStore(store);
|
return usePermissionStore(store);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user