• elememtui(有关权限的那些事)


    前言:关于权限路由的那些事儿……

    业务情景描述:现有一个后台管理系统,共存在三种类型的人员,①超级管理员(称作1);②组别管理员(2);③普通用户(3);每种类型的人看到的操作栏并不一样,可以进行的操作也不尽相同,于是就需要程序处理一下各个权限问题。

    过程:说难不简单,说简单并不难的过程

    权限3

    【迷茫的前期】

    上百度、Google,狂搜了好多关于权限的问题,也许是仁者见仁智者见智吧,五花八门的介绍让自己更加迷茫不堪,真心不知道从哪里下手:

    1)让后端返回关于权限的json数据吧,但却不太懂这样的数据应该怎样处理;

    2)在前端路由那里处理,可是不明白应该怎样使用何种属性来实现这个功能;

    恍然大悟的最后

    依靠各种微信群、QQ群试图解决自己遇见的各种问题,显然不太现实,但是如果可以作为一名热心帮助别人的人,其实也蛮有成就感的!

    最终解决方案:

    权限1

    权限2

    权限4

    【注意点】

    1)在route.js中,自定义一个属性并为之附上自己的规则;

    2)v-if 自定义函数:

    ...
    <!--导航菜单-->
                    <el-menu :default-active="$route.path" class="el-menu-vertical-demo" @open="handleopen" @close="handleclose" @select="handleselect"
                         unique-opened router v-show="!collapsed">
                        <template v-for="(item,index) in $router.options.routes" v-if="routesFun(item)">
                            <el-submenu :index="index+''" v-if="!item.leaf">
                                <template slot="title"><img :src="item.iconCls" style="vertical-align: middle; 17px;padding-right: 5px;"/>{{item.name}}</template>
                                <el-menu-item v-for="child in item.children" :index="child.path" :key="child.path" v-if="routesFun(child)"><img :src="child.iconCls" style="vertical-align: middle; 16px;padding-right: 5px;"/>{{child.name}}</el-menu-item>
                            </el-submenu>
                            <el-menu-item v-if="item.leaf&&item.children.length>0" :index="item.children[0].path"><i :class="item.iconCls"></i>{{item.children[0].name}}</el-menu-item>
                        </template>
                    </el-menu>
    ...

    在 methods中写方法:

    ...
    routesFun(item){ //权限展示判断条件
                    let loginType = admininfo.getType();
                    if(!item.hidden && loginType==1){ //超级管理员拥有所有权限
                        return true;
                    }
                    if(!item.hidden && item.route && item.route.indexOf(loginType)>=0){
                         return true;
                    }
                    return false;
    
                    // if(!item.hidden){
                    //     return true;
                    // }
                    // return false;    
                },
    ...

    3)替换掉demo中的原方法即可;

    4)看起来复杂的路由配置,就在前端处理掉了。

    后言:其实听别人说再多的理论,也不如自己亲手写写代码试试

    坦言自己处理这类问题的时候,考虑的的确没有老大想的周到,于是总是频繁出现问题,每每看见类似于Hme.vue中的“复杂”代码就却步了,以后如果要想成为老大那样厉害的人物,那就需要克服这一“顽固性”缺点。“因为喜欢,所以更加热爱。”

  • 相关阅读:
    2020.4.10个人总结
    CG-CTF simple machine
    CG-CTF Our 16bit wars
    CG-CTF Our 16bit Games
    CG-CTF single
    CG-CTF WxyVM2
    Go Channel 详解
    Go语言TCP Socket编程
    golang mysql demo
    YouCompleteMe unavailable: requires Vim compiled with Python 2.x support
  • 原文地址:https://www.cnblogs.com/zhengyeye/p/6908159.html
Copyright © 2020-2023  润新知