src创建directive/permission.js
import store from "@/store";
// <button v-permision="['admin','editor']"
const permission = {
inserted(el, binding) {
// 获取指令的值:按钮要求的角色数组
const { value:pRoles } = binding;
// 获取用户角色
const roles = store.state.user.roles;
if (pRoles && pRoles instanceof Array && pRoles.length > 0) {
// 判断用户角色中是否有按钮要求的角色
const hasPermission = roles.some(role => {
return pRoles.includes(role);
});
// 如果没有权限则删除当前dom
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el);
}
} else {
throw new Error(`需要指定按钮要求角色数组,如v-permission="['admin','editor']"`);
}
}
};
export default permission;
在main.js导入
import vp from './directive/permission'
Vue.directive('permission', vp);
在页面中使用
<template>
<div class="about">
<h1>This is an about page</h1>
<button v-permission="['admin']">admin</button>
<button v-permission="['admin','editor']">admin+editor</button>
</div>
</template>