按钮级权限控制,路由控制
按钮控制:参考硅谷甄选的directive,思路添加自定义指令,将引入到全局,app传递到指令内
import pinia from '@/store';
import useUserStore from '@/store/modules/user';
let userStore =useUserStore(pinia)
export const isHasButton = (app: any) => {
//获取对应的用户仓库
//全局自定义指令:实现按钮的权限
app.directive('has', {
//代表使用这个全局自定义指令的DOM|组件挂载完毕的时候会执行一次
mounted(el:any,options:any) {
//自定义指令右侧的数值:如果在用户信息buttons数组当中没有
//从DOM树上干掉
if(!userStore.buttons.includes(options.value)){
el.parentNode.removeChild(el);
}
},
})
}
路由控制
| 模块引入是单例 | import 的路由配置只会加载一次,后续操作可能污染原始数据。 |
//引入深拷贝方法lodash,必须深拷贝,否则会改变原数组
//@ts-ignore
import cloneDeep from 'lodash/cloneDeep'
import router from '@/router';
//用于过滤当前用户需要展示的异步路由
function filterAsyncRoute(asnycRoute: any, routes: any) {
return asnycRoute.filter((item: any) => {
if (routes.includes(item.name)) {
if (item.children && item.children.length > 0) {
//硅谷333账号:product\trademark\attr\sku
item.children = filterAsyncRoute(item.children, routes);
}
return true;
}
})
}

浙公网安备 33010602011771号