Vue自定义指令完成按钮级别的权限判断

权限指令,对按钮权限的控制

1.登录成功后,获取后台返回所有的按钮权限,存到sessionStorage中( 也可以存到vuex )

2.在main.js中自定义指令

3.定义指令,如果用户含有此按钮权限,则在页面显示出来( v-has绑定进行逻辑判断 )


登录成功后,获取后台返回所有的按钮权限,存到sessionStorage中

// 4.5获取当前登录用户角色权限列表   这个方法在登录中调用
roleUserInfo() {
  this.$ajax.get("/role/permissionlist").then(res => {
      sessionStorage.setItem("loginVal", JSON.stringify(res.data.data));
        setTimeout(() => {
          window.location.reload();
        }, 50);
      });
}

在main.js中自定义指令

//inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)
//如果bind获取不到el.parentNode
//试试把 bind 改为 inserted
const has = Vue.directive("has", {
    inserted: function(el, binding) {
        console.log(binding,"w")
        // 获取按钮权限// 获取按钮权限
        if (!Vue.prototype.$_has(binding.value)) {
            el.parentNode.removeChild(el);
        }
    }
});
//// 权限检查方法(且把该方法添加到vue原型中)
Vue.prototype.$_has = function(value) {
    let isExit = false;
    let buttonpermsStr = JSON.parse(sessionStorage.getItem("loginVal"));
    
    if (buttonpermsStr === undefined || buttonpermsStr=== null) {
        return false;
    }
    for (let i = 0; i < buttonpermsStr.length; i++) {
        let buttonpermsStrId = buttonpermsStr[i]
      if (buttonpermsStrId.code == value) {//要拿数据中不变的并且可以使用的字段进行判断,不可以使用id isExit = true; break; } } return isExit; }; export { has };

定义指令,如果用户含有此按钮权限,则在页面显示出来( v-has绑定进行逻辑判断 )

<!-- 在按钮上直接写上v-has="后台返回的按钮id" -->
<Button v-has="'add'">查看</Button>
posted @ 2019-11-19 13:30  写手在作画  阅读(2358)  评论(0编辑  收藏  举报