vue学习011:按钮级权限控制

 

最近做的一个后台系统,要求权限控制到按钮级别,也就是说对于不同的用户,可操作的按钮是不一样的,换言之,有些按钮对某些客户是不可见的.例如:用户A能看到"新增"按钮,而用户B看不到,假设"新增"按钮"的权限是"sys:add",

这里提供两种解决办法:1.定义一个全局方法,配合v-if实现;2.使用自定义指令;(以下详述)

1.定义一个全局方法,配合v-if实现;

在用户登录成功后,获取用户的按钮权限(数组格式),存储到store中

定义公共函数hasPermission

 

在main.js中引入,

在需要的按钮上使用即可

 

2.自定义指令

directives 在全局main.js中注册

路由配置:

{

      path:'/permission',

      component: Layout,

      meta: { btnPermissions: ['admin','supper','normal'] //页面需要的权限

},

自定义指令:

/**权限指令**/

const has = Vue.directive('has', { bind: function (el, binding, vnode) {   

  // 获取按钮权限

   let   btnPermissions = vnode.context.$route.meta.btnPermissions.split(",");  

   if(!Vue.prototype.$_has(btnPermissions)) {        

        el.parentNode.removeChild(el);    

   }

}});

// 权限检查方法

Vue.prototype.$_has = function (value) {

     let isExist =false;

     let btnPermissionsStr = sessionStorage.getItem("btnPermissions");   

     if(btnPermissionsStr == undefined || btnPermissionsStr ==null) {         

          return  false;   

      }  

     if(value.indexOf(btnPermissionsStr) > -1) {      

          isExist =true;   

      }

     returnisExist;

}

export {has};

/*然后在main.js文件引入文件*/

importhas from'./public/js/btnPermissions.js';

/*页面中按钮只需加v-has即可*/

以上,方法一亲测有效,方法二借鉴的,未能实践...

在el.parentNode.removeChild(el)报错,我看了一下,应该是页面没渲染完,el.parentNode是空的。 这个还有顺序要求吗?

 把bind改成inserted/ update /componentUpdated 就解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值