对于页面上的部分功能权限,可以通过指令的方式去控制
定义指令格式:
- 可以通过这样格式的指令进行功能受控 v-permission=“[‘importUser’]”
- importUser代表了用户所需要的权限
function checkPermission(el, binding) {
// 获取绑定的值,此处为权限
const { value } = binding
// 获取所有的功能指令
const points = store.getters.userInfo.permission.points
// 当传入的指令集为数组时
if (value && value instanceof Array) {
// 匹配对应的指令
const hasPermission = points.some((point) => {
return value.includes(point)
})
// 如果无法匹配,则表示当前用户无该指令,那么删除对应的功能按钮
if (!hasPermission) {
el.parentNode && el.parentNode.removeChild(el)
}
} else {
// eslint-disabled-next-line
throw new Error('v-permission value is ["admin","editor"]')
}
}
export default {
// 在绑定元素的父组件被挂载后调用
mounted(el, binding) {
checkPermission(el, binding)
},
// 在包含组件的 VNode 及其子组件的 VNode 更新后调用
update(el, binding) {
checkPermission(el, binding)
}
}
//注册指令
import permission from './permission'
export default (app) => {
...
app.directive('permission', permission)
}
//页面使用
<el-button v-permission="['distributePermission']">
{{ $t('msg.role.assignPermissions') }}
</el-button>