permission.js import store from '@/store' export default{ inserted(el, binding, vnode) { const { value } = binding const roles = store.getters && store.getters.roles if (value && value instanceof Array && 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(`need roles! Like v-permission="['admin','editor']"`) } } }
index.js
import permission from './permission' const install = function(Vue) { Vue.directive('permission', permission) } if (window.Vue) { window['permission'] = permission Vue.use(install); // eslint-disable-line } permission.install = install export default permission
用法:
import permission from '@/directive/permission/index.js' // 权限判断指令 name: 'DirectivePermission', components: { SwitchRoles }, directives: { permission } <span v-permission="['editor']" class="permission-alert"> Only <el-tag class="permission-tag" size="small">editor</el-tag> can see this </span>
注:使用install 的目的是 确保多次引用的情况下只加载一次