vue-element-equipment-pty/src/store/modules/permission.js
2026-04-18 14:06:33 +08:00

73 lines
1.6 KiB
JavaScript

import { asyncRoutes, constantRoutes } from '@/router'
import { getLoginData } from '@/utils/auth'
/**
* Use meta.role to determine if the current user has permission
* @param roles
* @param route
*/
function hasPermission(roles, route) {
if (route.meta && route.meta.roles) {
return roles.some(role => route.meta.roles.includes(role))
} else {
return true
}
}
/**
* Filter asynchronous routing tables by recursion
* @param routes asyncRoutes
* @param roles
*/
export function filterAsyncRoutes(routes, roles) {
const res = []
const loginData = getLoginData()
const data = loginData?.menuRole || 1
routes.forEach(route => {
const tmp = { ...route }
if (hasPermission(roles, tmp)) {
if (data >= tmp.role) {
if (tmp.children) {
tmp.children = filterAsyncRoutes(tmp.children, roles)
}
res.push(tmp)
}
}
})
return res
}
const state = {
routes: [],
addRoutes: []
}
const mutations = {
SET_ROUTES: (state, routes) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
}
}
const actions = {
generateRoutes({ commit }, roles) {
return new Promise(resolve => {
var newAccessRoutes = []
let loginData = getLoginData()
if (typeof loginData === 'string') loginData = JSON.parse(loginData)
if (loginData && loginData.menuRole === 2) {
newAccessRoutes = newAccessRoutes.concat(asyncRoutes)
}
commit('SET_ROUTES', newAccessRoutes)
resolve(newAccessRoutes)
})
}
}
export default {
namespaced: true,
state,
mutations,
actions
}