Vue 2 中推荐通过自定义指令 v-permission 实现按钮级权限控制,统一在 inserted 钩子中比对 Vuex 中的权限列表与指令值,无权限时移除 DOM 元素,并在 main.js 全局注册后于模板中以数组或字符串形式声明使用。
Vue 2 中实现按钮级权限控制,最常用且推荐的方式是通过自定义指令 v-permission。它不依赖每个组件重复写 v-if,而是把权限判断逻辑收口到指令内部,统一处理 DOM 显示/移除,既简洁又利于维护。
在 src/directives/permission.js 中定义指令:
inserted 钩子(Vue 2 对应 mounted),确保元素已挂载到 DOMstore.getters.permissions)获取当前用户拥有的全部权限标识(例如 ['sys:user:add', 'sys:user:delete'])v-permission="['sys:user:add']")是否被包含el.parentNode && el.parentNode.removeChild(el)
在 main.js 中注册:
import permission from './directives/permission'
Vue.directive('permission', permission)
new Vue(...) 实例创建在模板里直接使用,支持数组或字符串形式:
<button v-permission="['sys:user:add']">新增用户</button><el-button v-permission="'sys:role:edit'">编辑角色</el-button>some() + includes() 判断指令本身不负责获取权限,依赖前置准备:
state.permissions)并暴露为 getter