美文网首页基础前端
元素级别的权限控制

元素级别的权限控制

作者: CondorHero | 来源:发表于2020-05-14 23:59 被阅读0次

    前端在权限控制这块主要应用的有两个,第一:页面权限,这个比较常见了,平时写的路由就是控制页面的权限,第二:元素级别的权限控制,如果是在登陆系统就分配好权限,就没啥难度和页面权限做法相同了,难点就是系统里面有修改权限,根据权限来显示和隐藏不同的内容。

    一、Vue 中的按钮权限

    这个是比较常见了,在 Vue 中我们通常是使用 v-if 来实现,但是如果这中元素级别的权限过多,肯定是不利于管理的。所以实现方式在 Vue 中我想到的有两种:

    • 自定义指令方式

    Vue 官方自定义指令

    App.vue 组件:

    <template>
        <div>
            <h1>i am home button</h1>
            <div v-permission="1">
                <button>home</button>
            </div>
        </div>
        <div>
            <h1>i am back button</h1>
            <div v-permission="10">
                <button>back</button>
            </div>
        </div>
    </template>
    

    main.js 入口文件:

    import permission from "./views/permission";
    
    Vue.directive("permission",{
        inserted:function(el,binding){
            const hasPermission = permission(binding.value);
            if(hasPermission){
                el.parentNode && el.parentNode.removeChild(el);
            }
        }
    });
    

    permission.js 文件:

    export default function permission(key){
        let permissionList = [1,2,3,4];
        let index = permissionList.indexOf(key);
    
        if(index > -1 ){
            return true;
        }else{
            return false;
        }
    
    }
    
    • 自定义组件方式
      main.js 入口文件:
    import Permission from "./views/Permission.vue";
    
    Vue.component('Permission',Permission);
    

    注册组件为全局组件。

    App.vue 通过 props 传过去:

    <Permission permission="{'auth':'true','component':'<button>back</button>'}"></Permission>
    

    Permission.vue

    <template>
        <div>
            <div v-if="key.auth">
                <h1>你好</h1>
                <div v-html="key.component"></div>
            </div>
            和
        </div>
    </template>
    
    <script>
    export default {
        props:["permission"],
        data(){
            return {
                key : null
            }
        },
        created(){
            // JSON.parse 必须是单引号保着双引号
            this.key = JSON.parse('{"auth":true,"component":"<button>back</button>"}');
        }
    }
    </script>
    

    二、React 中的按钮权限

    React 相对 Vue 来讲没有那么多的 API,所以最常用的做法就是自定义组件来实现。思路和 Vue 的自定义组件实现方式相同,不同的是 Vue 组件显示隐藏使用的是 v-if , React 使用的是三元运算符。

    略。。。

    当前时间 Thursday, May 14, 2020 22:21:18

    相关文章

      网友评论

        本文标题:元素级别的权限控制

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