oil-station/fuintCashierWeb/src/store/permission.js

69 lines
2.0 KiB
JavaScript
Raw Normal View History

2023-10-09 11:06:01 +08:00
import { defineStore } from "pinia"
// 需要在头部传入路由表并且在用户登录的时候进行此操作
// 引入路由表
import { constantRouterMap, asyncRoutes } from '@/router'
/**
* 通过meta.role判断是否与当前用户权限匹配此处也可以根据自己的需求进行修改比如按位与
* @param roles 权限
* @param route 总的路由表
*/
function hasPermission(roles, route) {
if (route.meta && route.meta.roles) {
console.log(route.meta, roles.some(role => route.meta.roles.includes(role)))
return roles.some(role => route.meta.roles.includes(role))
} else {
return true
}
}
/**
* 递归过滤异步路由表返回符合用户角色权限的路由表
* @param routes 需要筛选的路由表
* @param roles 权限
*/
function filterAsyncRouter(routes, roles) {
const res = []
routes.forEach(route => {
const tmp = { ...route }
if (hasPermission(roles, tmp)) {
if (tmp.children) {
tmp.children = filterAsyncRouter(tmp.children, roles)
}
res.push(tmp)
}
})
return res
}
export const usePermissionStore = defineStore({
id: 'permission',
state: () => ({
routers: [],
}),
actions: {
GenerateRoutes(roles) {
return new Promise(resolve => {
let accessedRouters = []
// 在这里当是管理员权限时,就给予所有的路由表
if (roles === 'admin') {
accessedRouters = asyncRoutes
} else {
accessedRouters = filterAsyncRouter(asyncRoutes, roles)
}
this.routers = constantRouterMap.concat(accessedRouters)
resolve(this.routers)
})
},
ResetRoutes() {
return new Promise(resolve => {
this.routers = []
resolve()
})
}
},
})