oil-station/fuintCashierWeb/src/store/permission.js
2023-10-09 11:12:49 +08:00

69 lines
2.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
})
}
},
})