mirror of
https://github.com/un-pany/v3-admin-vite.git
synced 2025-04-21 11:29:20 +08:00
perf: 代码优化 store/modules/permission
This commit is contained in:
parent
5c09716fa5
commit
d090c294ae
@ -6,28 +6,19 @@ import { constantRoutes, asyncRoutes } from "@/router"
|
||||
import asyncRouteSettings from "@/config/async-route"
|
||||
|
||||
const hasPermission = (roles: string[], route: RouteRecordRaw) => {
|
||||
if (route.meta && route.meta.roles) {
|
||||
return roles.some((role) => {
|
||||
if (route.meta?.roles !== undefined) {
|
||||
return route.meta.roles.includes(role)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
const routeRoles = route.meta?.roles
|
||||
return routeRoles ? roles.some((role) => routeRoles.includes(role)) : true
|
||||
}
|
||||
|
||||
const filterAsyncRoutes = (routes: RouteRecordRaw[], roles: string[]) => {
|
||||
const res: RouteRecordRaw[] = []
|
||||
routes.forEach((route) => {
|
||||
const r = { ...route }
|
||||
if (hasPermission(roles, r)) {
|
||||
if (r.children) {
|
||||
r.children = filterAsyncRoutes(r.children, roles)
|
||||
const tempRoute = { ...route }
|
||||
if (hasPermission(roles, tempRoute)) {
|
||||
if (tempRoute.children) {
|
||||
tempRoute.children = filterAsyncRoutes(tempRoute.children, roles)
|
||||
}
|
||||
res.push(r)
|
||||
res.push(tempRoute)
|
||||
}
|
||||
})
|
||||
return res
|
||||
@ -38,12 +29,7 @@ export const usePermissionStore = defineStore("permission", () => {
|
||||
const dynamicRoutes = ref<RouteRecordRaw[]>([])
|
||||
|
||||
const setRoutes = (roles: string[]) => {
|
||||
let accessedRoutes
|
||||
if (!asyncRouteSettings.open) {
|
||||
accessedRoutes = asyncRoutes
|
||||
} else {
|
||||
accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
|
||||
}
|
||||
const accessedRoutes = asyncRouteSettings.open ? filterAsyncRoutes(asyncRoutes, roles) : asyncRoutes
|
||||
routes.value = constantRoutes.concat(accessedRoutes)
|
||||
dynamicRoutes.value = accessedRoutes
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user