hasPermi.ts,具体逻辑根据各自的项目自行设计
import router from '@/router';
import { usePermissionStore } from '@/store';
export default {
mounted(el, binding) {
const { value } = binding;
if (value && value instanceof Array && value.length > 0) {
let hasPermission = false;
const permissionStore = usePermissionStore();
const pagesRoutesMap = permissionStore.pagesRoutesMap;
if (pagesRoutesMap.size === 0) {
hasPermission = false;
} else {
const routePath = (router.currentRoute as any)._value.path || '';
const target: any = pagesRoutesMap.get(routePath);
if (!target) {
hasPermission = false;
} else {
const permissions = target.buttonPermissionList || [];
hasPermission = permissions.some((permission) => {
return value.includes(permission);
});
}
}
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el);
}
} else {
throw new Error('v-hasPermi value must be an array');
}
},
};
index.ts
import hasPermi from './hasPermi';
export default function directive(app) {
app.directive('hasPermi', hasPermi);
}
在main.ts中引入
import directive from '@/directive';
directive(app);
使用
v-hasPermi="['system:user:add', 'system:user:delete']"