vue 自定义指令(directive)之 按钮权限

  • 第一步在公共方法文件夹创建一个auth.js
//auth.js
/**
 * @description 鉴权指令
 * 当传入的权限当前用户没有时,会移除该组件
 * 用例:<Tag v-auth="['admin']">text</Tag>
 * */
import store from '@/store';
import Cache from '@/utils/cache.js'
/**
 * @description 判断列表1中是否包含了列表2中的某一项
 * 因为用户权限 access 为数组,includes 方法无法直接得出结论
 * */
function includeArray (list1, list2) {
    let status = false;
    if (list1 === true) {
        return true
    } else {
        if (typeof list2 !== 'object') {
            return false;
        }
        list2.forEach(item => {
            if (list1.includes(item)) status = true;
        });
        return status;
    }
}

export default {
    inserted (el, binding, vnode) {
        const { value } = binding;
        const access = JSON.parse(Cache.get('USER_INFO')).access || ['add'] ; //此数据为后台返回数据 可存在vuex里取,也存在浏览器缓存里取
        if (value && value instanceof Array && value.length && access && access.length) {
            const isPermission = includeArray(value, access);
            if (!isPermission) {
                el.parentNode && el.parentNode.removeChild(el);
            }
        }
    }
}
  • 第二步 在main.js 里引入 并注册指令
//.main.js
import Vue from 'vue';
import directiveAuth from "@/components/auth.js";

// 指令名字可自定义 
Vue.directive('auth',directiveAuth)
  • 第三步 在demo中使用
<template>
  <div>
    <button v-auth="['add']">添加</button>
    <button v-auth="['update']">编辑</button>
    <button v-auth="['delete']">删除</button>
  </div>
</template>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 11,292评论 0 4
  • 公元:2019年11月28日19时42分农历:二零一九年 十一月 初三日 戌时干支:己亥乙亥己巳甲戌当月节气:立冬...
    石放阅读 11,810评论 0 2
  • 年纪越大,人的反应就越迟钝,脑子就越不好使,计划稍有变化,就容易手忙脚乱,乱了方寸。 “玩坏了”也是如此,不但会乱...
    玩坏了阅读 6,526评论 2 1
  • 感动 我在你的眼里的样子,就是你的样子。 相互内化 没有绝对的善恶 有因必有果 当你以自己的价值观幸福感去要求其他...
    周粥粥叭阅读 5,565评论 1 5
  • 昨天考过了阿里规范,心里舒坦了好多,敲代码也犹如神助。早早完成工作回家喽
    常亚星阅读 8,134评论 0 1