zoukankan      html  css  js  c++  java
  • 【VUE】实现一个常见的路由拦截表

    我们经常需要根据路由表划定权限,在前端开发中,可以通过划定某种具体权限的路由表,来决定一些指定的路由是否应该应用某些操作

     1 function checkRouteByRule(ruleRoute,path) {
     2     let flag = false;
     3 
     4     let metaList = ruleRoute.map(item => {
     5         let perRouterMetaList = item.split("/").filter(function (s) {
     6             //去除数组内元素为空的元素
     7             return s && s.trim();
     8         })
     9         return perRouterMetaList
    10     })
    11 
    12     let pathMeta = path.split("/").filter(function (s) {
    13         //去除数组内元素为空的元素
    14         return s && s.trim();
    15     })
    16 
    17     for (let i = 0; i < metaList.length; i++) {
    18         let currentRouteLenth = metaList[i].length;
    19         let cutLength = currentRouteLenth;//截断偏移量
    20         let oneTimeCompare = true;
    21 
    22         //规整化:确定*的位置,不比较*及以后的内容
    23         for (let j = 0; j < currentRouteLenth; j++) {
    24             if (metaList[i][j] == "*") {
    25                 cutLength = i;
    26                 break;
    27             }
    28         }
    29 
    30         //如果现在正在识别的路由没有*,meta个数和待匹配的路由meta不一致,则直接判定不匹配
    31         if(cutLength==currentRouteLenth){
    32             if(pathMeta.length!=currentRouteLenth){
    33                 continue;
    34             }
    35         }
    36 
    37         //ruleRoute表中的元素依次比对
    38         for (let j = 0; j < cutLength; j++) {
    39             let firstMetaChar = metaList[i][j][0];
    40             if (firstMetaChar != ":") {
    41                 if (pathMeta[j] != metaList[i][j]) {
    42                     oneTimeCompare = false;
    43                     break;
    44                 }
    45             } else {
    46                 continue;
    47             }
    48         }
    49 
    50         //如果匹配到一个OK的路由,则表示应该符合rule对应规则,退出大循环
    51         if (oneTimeCompare == true) {
    52             flag = true;
    53             break;
    54         }
    55     }
    56 
    57     return flag;
    58 }

    上述的函数接受两个参数  ruleRoute,path。其中,ruleRoute是需要进行遍历判定的路由表,如判定成功,则表示具有rule对应的权限。path是直接被进行判定的路由

    例如定义规则hide路由表(名称为hide的一个字符串数组):

    const hide = [
        '/new-ticket/:id',
        'new-ticket/:id'
    ]
     
    若路由符合hide内任意一个元素规则,则表示该路由被触发后应该应用hide对应的规则。
    上述匹配函数支持的路由表内元素写法:
    /new-ticket/helx/fuck  常规路由
    /heihei/mother/:id  带路由参数的路由
    /shit/*      *代表任意长度、内容
    /shit/:id/*  既带路由参数,又带*指代某个位置后的任意内容
     
     
  • 相关阅读:
    Comparison of MPTCP & CMT-SCTP
    Wireshark
    MPTCP协议相关分析
    抑郁
    MPTCP 源码分析(七) 拥塞控制
    MPTCP 源码分析(六) 数据重发
    MPTCP 源码分析(五) 接收端窗口值
    MPTCP 源码分析(四) 发送和接收数据
    MPTCP 源码分析(三) 子路径选择
    MPTCP 源码分析(二) 建立子路径
  • 原文地址:https://www.cnblogs.com/sbhyc/p/13362285.html
Copyright © 2011-2022 走看看