国产黄色免费网站_久久天天做天天爱综合色_精品国产一区久久久_成人黄色激情网站_久久成人在线视频_美女一区二区在线观看_亚洲精品免费一区亚洲精品免费精品一区 _91精品国产综合久久精品麻豆

根據(jù)用戶權(quán)限不同,動態(tài)生成路由導(dǎo)航菜單(一)

2019-12-27    seo達(dá)人

首先讓我們了解一下前端路由:路由router全部配置在前端,根據(jù)用戶權(quán)限判斷可以進(jìn)入哪些頁面

缺點:



vue初始化的時候需要掛載全部路由,對性能有影響

安全性低,用戶可以在地址欄跳轉(zhuǎn)到無權(quán)訪問的頁面(可優(yōu)化)

動態(tài)路由則是根據(jù)用戶信息獲取權(quán)限,簡單來說就是根據(jù)用戶信息獲取其對應(yīng)的權(quán)限,生成對應(yīng)的路由掛載,然后動態(tài)渲染有權(quán)限的菜單于側(cè)邊欄



實現(xiàn)

定義靜態(tài)路由(登錄或者公用頁面)、動態(tài)路由,vue初始化時只掛載靜態(tài)路由

用戶登錄后,拿到用戶token,調(diào)接口拿到動態(tài)路由權(quán)限D(zhuǎn)ynamicRoutes,將DynamicRoutes和定義的動態(tài)路由比較,篩選出相應(yīng)的用戶可訪問路由表

執(zhí)行router.addRoutes(DynamicRoutes)添加動態(tài)路由

使用vuex存儲路由表,根據(jù)vuex中可訪問的路由渲染側(cè)邊欄sidebar

// beforeEach中

if (getToken() && getToken() !== 'undefined') {

  // 權(quán)限判斷

  if (!store.state.app.menuPermissions) {

    / 獲取后臺給的權(quán)限數(shù)組 /

    return new Promise((resolve, reject) => {

      getPermissionList().then(response => {

        if (response.data.stat === 1) {

          const userRouter = response.data.data

          // 檢查并生成新的路由表

          const DynamicRoutes = ChecAndSetPermissionRouter(userRouter)

          // 默認(rèn)使/重定向到第一個有效的路由

          for (let i = 0, leni = DynamicRoutes.length; i < leni; i++) {

            if (DynamicRoutes[i].children.length > 0) {

              DynamicRoutes[i].path = '/'

              DynamicRoutes[i].redirect = DynamicRoutes[i].children[0].path

              break

            }

          }

          DynamicRoutes.push({ path: '', redirect: '/404', hidden: true }) // 全局404

          /
生成左側(cè)導(dǎo)航菜單 /

          store.dispatch('SetMenuPermissions', DynamicRoutes)



          /
  動態(tài)添加路由 /

          router.addRoutes(DynamicRoutes)



          // /
完整的路由表 /

          store.dispatch('SetRouterPemissions', [...constantRouterMap, ...DynamicRoutes])

          next(to)

        }

      }).catch(error => {

        router.push('/404')

        // /
生成左側(cè)導(dǎo)航菜單 */

        store.dispatch('SetMenuPermissions', [])

        next()

        reject(error)

      })

    })

  }

  if (to.path === '/login') {

    next({ path: '/' })

  } else {

    next()

  }

} else {

  if (whiteList.indexOf(to.path) !== -1) {

    next()

  } else {

    next(/login?redirect=${to.path}) // 否則全部重定向到登錄頁

  }

}



踩坑來了





Q:為什么404 頁面一定要最后加載,放置在靜態(tài)路由中會怎么樣?

放在靜態(tài)路由里,后面的所以頁面都會被攔截到404,所以應(yīng)該獲取動態(tài)路由權(quán)限之后push

Q:權(quán)限獲取成功,不跳轉(zhuǎn)新生成的動態(tài)路由,跳404?

beforeEach中router.addRoutes之后的next()可能會失效,因為可能next()的時候路由并沒有完全add完成,可替換成next(to),重新進(jìn)入router.beforeEach這個鉤子,這時候再通過next()來釋放鉤子,就能確保所有的路由都已經(jīng)掛在完成了。

Q:$router.addRoutes()動態(tài)添加的路由怎么刪除掉?

在開發(fā)中,有新增編輯刪除菜單并要求左側(cè)邊欄菜單及時更新的需求,如果直接addRoutes,warn如下:



解決:addRoutes之前要清除掉上次addRoutes的路由,所以操作菜單調(diào)取權(quán)限后重新初始化router,進(jìn)行matcher賦值



// DynamicRoutes是權(quán)限路由

const createRouter = () => new Router({

  mode: 'hash',

  routes: []

})

const newRouter = createRouter()

// resetRouter()

this.$router.matcher = newRouter.matcher

this.$router.addRoutes(DynamicRoutes)



Q:莫名其妙的無限循環(huán)

vue-admin-template,遇到二級菜單children為空的權(quán)限,報錯如下:

解決:按照github-issues上方法,在SidebarItem.vue里改一下data就好了(沒想通為啥)



// 更改后如下,return {}

data() {

    this.onlyOneChild = null

    return {}

}



附:ChecAndSetPermissionRouter



import { dynamicRouterMap } from '@/router'



export function ChecAndSetPermissionRouter(permissionDatas) {

  // 獲取到權(quán)限hashmap

  var permissionHashMap = null

  permissionHashMap = GetPermissionHashMap(permissionDatas)

  // 標(biāo)記路由表

  var newDynamicRouterMap = []

  newDynamicRouterMap = objDeepCopy(dynamicRouterMap)

  newDynamicRouterMap.forEach(item => {

    MarkRouter(null, item, permissionHashMap)

  })

  // 重設(shè)路由表

  for (let i = 0; i < newDynamicRouterMap.length; i++) {

    if (ResetRouter(newDynamicRouterMap, newDynamicRouterMap[i])) {

      i-- // 注意:防止移除后索引錯位

    }

  }

  return newDynamicRouterMap

}

function GetPermissionHashMap(permissionDatas) {

  var permissionHashMap = {}

  permissionDatas.forEach(item => {

    SetKeyValueOfNodes(null, item, permissionHashMap)

  })

  return Object.assign({}, permissionHashMap)

}



// 深拷貝,遞歸重新設(shè)置前端路由表,避免數(shù)據(jù)復(fù)用

function objDeepCopy(source) {

  var sourceCopy = source instanceof Array ? [] : {}

  for (var item in source) {

    sourceCopy[item] = typeof source[item] === 'object' ? objDeepCopy(source[item]) : source[item]

  }

  return sourceCopy

}



// 為權(quán)限hashmap的屬性賦值,新增屬性tempKey/tempKey2

function SetKeyValueOfNodes(p, c, permissionHashMap) {

  // 需要匹配的組合類型

  var tempKey = (p ? p.name : 0) + '' + c.name

  var tempKey2 = c.name + '
' + c.name

  // 賦值

  permissionHashMap[tempKey] = 1

  permissionHashMap[tempKey2] = 1

  // 遞歸遍歷子節(jié)點賦值

  if (c.children != null && c.children.length > 0) {

    c.children.forEach(item => {

      SetKeyValueOfNodes(c, item, permissionHashMap)

    })

  }

}



// 標(biāo)記路由表

function MarkRouter(p, c, permissionHashMap) {

  var key = (p ? p.meta.title : 0) + '_' + c.meta.title

  // 使用拼接的key作為參考標(biāo)記去匹配有權(quán)限的路由表

  if (HasPermission(key, permissionHashMap)) {

    if (p != null) {

      p.keep = true // 保留當(dāng)前節(jié)點

    }

    if (c != null) {

      c.keep = true

    }

  }

  if (c.children && c.children.length > 0) {

    c.children.forEach(item => {

      MarkRouter(c, item, permissionHashMap)

    })

  }

}



// 校驗后端接口是否存在當(dāng)前節(jié)點

function HasPermission(key, permissionHashMap) {

  return permissionHashMap[key] === 1

}



// 重置路由表

function ResetRouter(p, c) {

  if (c == null) {

    return false

  }

  if (p.children && !c.keep) {

    p.children.splice(p.children.indexOf(c), 1)

    return true

  } else if (!c.keep) {

    p.splice(p.indexOf(c), 1)

    return true

  }

  if (c.children && c.children.length > 0) {

    for (let i = 0; i < c.children.length; i++) {

      if (ResetRouter(c, c.children[i])) {

        i-- // 注意:防止移除后索引錯位

      }

    }

  }

  return false

}




日歷

鏈接

個人資料

藍(lán)藍(lán)設(shè)計的小編 http://www.newchinaweekly.com

存檔

深夜宅男网站免费进入| 久久亚洲私人国产精品va | 高清日韩一区| 人人妻人人澡人人爽精品欧美一区| 亚洲精品一区二| 香港日本韩国三级网站| 99久久久无码国产精品不卡| 中文字幕无线码一区| 亲爱的老师6电影韩剧| 日本aa大片在线播放免费看| av中文字幕在线播放| 欧美一区在线观看视频| 欧美不卡视频| 99久久精品国产麻豆演员表| 欧美日韩国产中字| 国产亚洲成精品久久| 国产欧美精品一区二区三区-老狼| 影音欧美亚洲| 欧美 日本 国产| 一道本在线视频| www视频网站| 欧洲在线视频| 欧美3p视频| 久久综合给合久久狠狠狠97色69| 色婷婷综合久久久中文字幕| 久久视频国产精品免费视频在线| 国内精品视频在线播放| 一区二区三区免费播放| 国产午夜激情视频| 国产二级c片l毛片| 成人黄色在线电影| 成人vr资源| 久久午夜免费电影| 精品对白一区国产伦| 国产日韩欧美影视| 久久精品免费网站| 成人h动漫精品一区二区下载| freesex欧美| 成人爽a毛片免费啪啪动漫| 免费毛片在线不卡| 91视频免费播放| 亚洲精品久久久一区二区三区 | 亚洲日韩第一页| 国产综合欧美在线看| 国产原创剧情av| 亚洲va久久久噜噜噜无码久久| 日韩av电影免费| 亚洲网一区二区三区| 国模一区二区三区白浆| 欧美日韩mp4| 91久久综合亚洲鲁鲁五月天| 色婷婷一区二区三区av免费看| 中文字幕av久久爽| 两个人hd高清在线观看| 高清日韩中文字幕| 91在线云播放| 中文字幕在线视频日韩| 在线视频亚洲自拍| 国产在线拍揄自揄拍| 在线观看av资源网| 超碰97成人| 国产午夜三级一区二区三| 在线视频欧美性高潮| 奇米精品一区二区三区在线观看 | 精品婷婷色一区二区三区蜜桃| 国产日韩视频一区| 欧美另类在线视频| 欧洲一级精品| 免费毛片在线看片免费丝瓜视频 | a一区二区三区亚洲| 国产成a人无v码亚洲福利| 亚洲国产免费av| 一区二区三区国产福利| 91人妻一区二区三区蜜臀| ass白嫩白嫩的小美女| 一区二区三区在线免费看| 久久久久久久国产精品影院| 欧美夫妻性生活视频| 精品视频无码一区二区三区| 国产哺乳奶水91在线播放| 男人在线资源站| 日本三级亚洲精品| 亚洲美女精品成人在线视频| 中国女人做爰视频| 最近日韩免费视频| 国产美女福利在线| 久久aⅴ国产欧美74aaa| 国产亚洲aⅴaaaaaa毛片| 日本在线xxx| 亚洲成a人片77777精品| 欧美另类老肥妇| 99视频超级精品| 欧美精品18videosex性欧美| 久久精品久久99| 一个人看的日本免费视频 | 高清电影在线观看免费| 国产精品亚洲一区二区三区妖精| 久久精品国产精品亚洲| 一级黄色高清视频| 米奇四色影视| 色天天久久综合婷婷女18| 欧美日韩和欧美的一区二区| 伊人久久大香线蕉精品| 国产精品无码白浆高潮| 国产在线美女| 久久精品一区二区| 成人黄色中文字幕| 亚洲激情视频一区| 超碰在线无需免费| 2021国产精品久久精品| 国产成人综合一区二区三区| 人人艹在线视频| 久色视频在线| 国产精品自在在线| 日本成人精品在线| 丰满少妇被猛烈进入一区二区| 黄色国产在线| 国产成人在线影院| 国内精品久久久久久久| 免费视频91蜜桃| 国产youjizz在线| proumb性欧美在线观看| 国产日韩av在线播放| 91蜜桃视频在线观看| av今日在线| 一区二区三区免费观看| 亚洲国产精品一区二区第四页av| 蜜桃久久一区二区三区| 成人另类视频| 精品日韩在线一区| 乳色吐息在线观看| 中文字幕一区免费| 成人高清免费观看| 99视频在线播放| 精品人妻一区二区三区蜜桃| 视频一区在线| 欧美电影免费观看完整版| 高清国语自产拍免费一区二区三区| 无码人妻久久一区二区三区| 欧美大片免费高清观看| 亚洲va国产va欧美va观看| 青草视频在线观看视频| 少妇bbw搡bbbb搡bbbb| av成人激情| 日韩av理论片| 一本色道久久综合熟妇| 国产精品宾馆| 亚洲欧美制服另类日韩| 白丝女仆被免费网站| 欧美成人三区| 亚洲精品乱码久久久久久| 日本a在线天堂| 黑巨茎大战欧洲金发美女| 另类小说视频一区二区| 91九色露脸| 天海翼中文字幕| 日韩午夜免费视频| 国产欧美精品va在线观看| 国产成人久久精品77777综合| 亚洲人成精品久久久| 俺也去精品视频在线观看| 久久精品波多野结衣| 大胆国模一区二区三区| 精品日韩99亚洲| 成人免费视频入口| 欧美黄色网页| 精品国产三级电影在线观看| 成年人免费观看视频网站| 中文字幕在线视频久| 91精品福利在线一区二区三区 | 青青青草网站免费视频在线观看| 91免费视频大全| 日本xxxxx18| 天天干狠狠干| 中文字幕一区二区三区视频| 成人免费网站在线| 午夜视频免费看| 国产精品美女久久久久人| 欧美一二三区在线| 成人黄色免费网址| a成人v在线| 正在播放欧美视频| 欧美一区二区三区网站| 九九久久电影| 国产激情久久久久| 777琪琪电影午夜理伦片| 奇米精品一区二区三区在线观看| 国产精品日韩二区| 青青草免费观看完整版高清| 成人av第一页| 精品国产免费av| 黄网站在线播放| 91精品免费在线| 久操视频免费在线观看| 最新亚洲精品| 成人午夜在线观看| 天堂午夜在线| 综合自拍亚洲综合图不卡区| 日韩欧美精品一区二区| 久草.com|