随笔 - 21  文章 - 0  评论 - 0  阅读 - 2594

vue全局指令按钮权限控制

方法一:指令.js

复制代码
// 注册一个全局自定义指令 `v-has-permission`
Vue.directive('has-permission', {
  bind(el, binding, vnode) {
    // 获取绑定的权限值
    const permission = binding.value;
    // 检查用户是否拥有该权限
    const hasPermission = checkUserPermission(permission); // 假设这是一个检查权限的函数
 
    if (!hasPermission) {
      // 如果用户没有权限,移除DOM元素
      el.parentNode && el.parentNode.removeChild(el);
    }
  }
});
 
// 检查权限的示例函数
function checkUserPermission(permission) {
  // 这里应该是逻辑来判断用户是否拥有权限
  // 假设当前用户拥有权限,返回 true
  return true;
}
复制代码

使用

<template>
  <button v-has-permission="'edit'">编辑</button>
</template>

 

 

方法二:声名permission.js

 

复制代码
import store from '@/store'
 
const directive = {}
directive.install = Vue => {
    Vue.directive('has',{
        bind:function(el,binding,vnode){
            // 解构store中存储的permission数据
            let { user = {} } = store.state
            let {permissions = []} = user
            console.log('permissions',permissions);
 
            // 判断permission数组中是否包含binding.value的值
            // console.log(permissions.includes('sys:log:delete'));
            console.log(permissions.includes(binding.value));
 
            // permission数组中包含binding.value的值时,显示按钮;否则隐藏
            permissions.includes(binding.value)?el.style.display='true':el.style.display='none'
        }
    })
}
export default directive
复制代码

 

在全局文件main.js中引入

 

// 导入按钮权限自定义指令
import directive from '@/directives/permission'
Vue.use(directive)

 

在页面中引用自定义指令‘has’

 

// permission数组中不包含'sys:user:add2',故该按钮隐藏
<el-button v-has="'sys:user:add2'" type="primary">权限2</el-button>
 
// permission数组中包含'sys:user:add',故该按钮显示
<el-button v-has="'sys:user:add'" type="primary">权限1</el-button>

 

posted on   W-阿飞  阅读(219)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示