美文网首页
自定义组件按钮权限 (2)

自定义组件按钮权限 (2)

作者: world_7735 | 来源:发表于2023-08-10 11:09 被阅读0次

    按钮权限

    方案一

    按钮权限也可以用v-if判断

    但是如果页面过多,每个页面页面都要获取用户权限role和路由表里的meta.btnPermissions,然后再做判断

    这种方式就不展开举例了

    方案二

    通过自定义指令进行按钮权限的判断

    首先配置路由

    {
        path: '/permission',
        component: Layout,
        name: '权限测试',
        meta: {
            btnPermissions: ['admin', 'supper', 'normal']
        },
        //页面需要的权限
        children: [{
            path: 'supper',
            component: _import('system/supper'),
            name: '权限测试页',
            meta: {
                btnPermissions: ['admin', 'supper']
            } //页面需要的权限
        },
        {
            path: 'normal',
            component: _import('system/normal'),
            name: '权限测试页',
            meta: {
                btnPermissions: ['admin']
            } //页面需要的权限
        }]
    }
    

    自定义权限鉴定指令

    import Vue from 'vue'
    /**权限指令**/
    const has = Vue.directive('has', {
        bind: function (el, binding, vnode) {
            // 获取页面按钮权限
            let btnPermissionsArr = [];
            if(binding.value){
                // 如果指令传值,获取指令参数,根据指令参数和当前登录人按钮权限做比较。
                btnPermissionsArr = Array.of(binding.value);
            }else{
                // 否则获取路由中的参数,根据路由的btnPermissionsArr和当前登录人按钮权限做比较。
                btnPermissionsArr = vnode.context.$route.meta.btnPermissions;
            }
            if (!Vue.prototype.$_has(btnPermissionsArr)) {
                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;
        }
        return isExist;
    };
    export {has}
    

    在使用的按钮中只需要引用v-has指令

    <el-button @click='editClick' type="primary" v-has>编辑</el-button>
    

    相关文章

      网友评论

          本文标题:自定义组件按钮权限 (2)

          本文链接:https://www.haomeiwen.com/subject/lexvbrtx.html