前端面试 vue 按钮级的权限控制

方案一

按钮权限也可以用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>

相关推荐

  1. 前端面试 vue 接口权限控制

    2024-07-22 16:40:02       22 阅读
  2. 前端面试 vue 路由权限控制

    2024-07-22 16:40:02       17 阅读
  3. 前端权限控制

    2024-07-22 16:40:02       30 阅读
  4. Vue3+Element+TS动态菜单+按钮权限控制实现探索

    2024-07-22 16:40:02       29 阅读
  5. 5-用户权限控制前端

    2024-07-22 16:40:02       23 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 16:40:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 16:40:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 16:40:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 16:40:02       55 阅读

热门阅读

  1. 0、springboot3 vue3开发平台-系统简介

    2024-07-22 16:40:02       17 阅读
  2. 将用户控件嵌入到 Excel 窗口中

    2024-07-22 16:40:02       15 阅读
  3. 数据仓库中的数据治理方法

    2024-07-22 16:40:02       17 阅读
  4. GFS分布式文件系统

    2024-07-22 16:40:02       15 阅读
  5. linux环境下使用logrotate切分nginx日志

    2024-07-22 16:40:02       18 阅读
  6. css中浮动的原理

    2024-07-22 16:40:02       15 阅读
  7. c# 索引器

    2024-07-22 16:40:02       17 阅读
  8. 初入C语言的主要难点

    2024-07-22 16:40:02       17 阅读
  9. PostgreSQL 慢 SQL 排查

    2024-07-22 16:40:02       19 阅读
  10. YARA:第十六章-libyara之C API手册(威胁检测)

    2024-07-22 16:40:02       15 阅读
  11. ipython 的使用技巧的整理

    2024-07-22 16:40:02       17 阅读