实现指令 v-permission,用于控制元素的显示与隐藏。
import { DirectiveBinding } from "vue";
function checkPermission(el: HTMLBaseElement, binding: DirectiveBinding) {
const { value } = binding;
const roles = ["admin"]; //当前用户的角色
if (value && value instanceof Array) {
if (value.length > 0) {
const permissionRoles = value;
const hasPermission = roles.some((role) => {
return permissionRoles.includes(role);
});
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el);
}
}
} else {
throw new Error(`暂无权限`);
}
}
export default {
mounted(el: HTMLBaseElement, binding: DirectiveBinding) {
checkPermission(el, binding);
},
update(el: HTMLBaseElement, binding: DirectiveBinding) {
checkPermission(el, binding);
}
};
import { createApp } from "vue";
import App from "./App.vue";
const app = createApp(App);
app.directive("permission", permission);
<template>
<div>
<!-- 只允许admin 和 editor -->
<el-button
v-permission="['admin','editor']"
type="primary"
icon="el-icon-plus"
>
新建
</el-button>
</div>
</template>