• vue 按钮权限 鉴权


    在实际项目开发中,登陆的账号会有多种角色,例如操作员新增,审核员审批。每个角色的按钮权限都不相同,我们在开发中应该做好这一块的权限处理


    1.登陆获取按钮权限的数组

    首先用户登录时,我们可以用过API接口获取所有菜单和按钮的权限,我们可以把所有按钮信息,保存在sessionStorage中。

    const AuthorityData = {
        menus : ['home', 'dashboard'],
        buttons: ['share', 'edit'],
    }
    // 将按钮权限信息保存起来,防止刷新页面时丢失
    sessionStorage.setItem( "permission_button", JSON.stringify(AuthorityData.buttons));
    
    

    2.v-if的简单实现

    拿vue项目举个栗子,我们可以通过v-if来实现权限的控制,还是比较简单有效的

    <el-button v-if="permission_button.includes('edit')">修改</el-button>
    
    <script>
      export default {
          data() {
              return  {
                  permission_button: JSON.parse(sessionStorage.getItem("permission_button"))
                }
          }
      }
    </script>
    

    3.全局的自定义指令

    上面就实现了一个简单的前端按钮权限控制,但是有一丢丢不优雅,每次都要多定义一个变量。怎么解决呢?
    我们可以定义一个全局的自定义指令,这样代码就大大的减少了,偷懒才是最舒服的。还是拿vue举例毕竟我只会这个。

    import Vue from 'vue';
    Vue.directive('btnlimit', {
        // 当被绑定的元素插入到 DOM 中时……
        inserted: (el, binding) => {
            // el 当前绑定的元素 binding.value指令的绑定值
            let permissionList = sessionStorage.getItem('permission_button');
            // 判断一下是否包含这个元素,如果不包含的话,那就让他爸爸元素把子元素扔进垃圾堆
            if (!permissionList.includes(binding.value)) {
                el.parentNode.removeChild(el)
            }
        }
    })
    // 大家可以把自己定义的指令写在一个directive.js文件中,在main.js总入口引入下就可以了,简单而不失优雅
    

    我们不妨复习下其他几个钩子函数(都是复制vue官方文档,我也不懂啥意思,哈哈)

    一个指令定义对象可以提供如下几个钩子函数 (均为可选):

    • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
    • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
    • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

    4.vue组件的使用自定义指令

    好了,定义过了全局自定义指令了,我们就可以在所有的vue组件中肆无忌惮的运用它了,不需要单独引用了,是不是又省去了CTRL+C CTRL+V的时间?只可惜双引号套着单引号有点不爽,可惜我也不会优化了。

    <el-button v-btnlimit="'edit'">修改</el-button>
    
  • 相关阅读:
    python基础之元组,集合
    python列表补充、循环
    python基础之字典、赋值补充
    python基础2
    基本数据类型
    计算机基础与计算机硬件总结
    python基础
    操作系统
    Django APP打包重用
    PyCharm 使用Github托管Django项目
  • 原文地址:https://www.cnblogs.com/taxi/p/14190379.html
Copyright © 2020-2023  润新知