国产性猛交xx乱_性色国产成人久久久精品_亚洲成年人av_亚洲av片不卡无码久久_日本精品一二三_久久免费精品国产_欧美成人精品一区二区综合免费_无码人妻丰满熟妇区毛片蜜桃精品_四虎永久免费影院_国产一区二区三区四区在线

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

2019-12-27    seo達人

首先讓我們了解一下前端路由:路由router全部配置在前端,根據(jù)用戶權(quá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)

          // 默認使/重定向到第一個有效的路由

          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),重新進入router.beforeEach這個鉤子,這時候再通過next()來釋放鉤子,就能確保所有的路由都已經(jīng)掛在完成了。

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

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



解決:addRoutes之前要清除掉上次addRoutes的路由,所以操作菜單調(diào)取權(quán)限后重新初始化router,進行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)

  // 標記路由表

  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)

    })

  }

}



// 標記路由表

function MarkRouter(p, c, permissionHashMap) {

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

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

  if (HasPermission(key, permissionHashMap)) {

    if (p != null) {

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

    }

    if (c != null) {

      c.keep = true

    }

  }

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

    c.children.forEach(item => {

      MarkRouter(c, item, permissionHashMap)

    })

  }

}



// 校驗后端接口是否存在當前節(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

}




日歷

鏈接

個人資料

藍藍設(shè)計的小編 http://m.wowo44.com

存檔

国产性猛交xx乱_性色国产成人久久久精品_亚洲成年人av_亚洲av片不卡无码久久_日本精品一二三_久久免费精品国产_欧美成人精品一区二区综合免费_无码人妻丰满熟妇区毛片蜜桃精品_四虎永久免费影院_国产一区二区三区四区在线
久久久高清一区二区三区| 久久国产尿小便嘘嘘尿| 五月婷婷综合在线| 美女一区二区视频| caoporm超碰国产精品| 国产91色综合久久免费分享| av不卡在线观看| 国产裸体视频网站| 国产综合内射日韩久| 欧美在线一级片| 久久视频一区二区三区| 久久久久久国产免费a片| 国产美女久久久久久| 91精品久久久久久蜜臀| 欧美经典一区二区| 日韩av在线播放中文字幕| 成人av资源下载| 99久久免费看精品国产一区| 精品欧美一区二区久久久久| 精品少妇一区二区三区日产乱码| 日韩电影在线观看网站| 亚洲AV无码久久精品国产一区| 在线免费观看麻豆| 日韩亚洲欧美中文三级| 国产精品免费aⅴ片在线观看| 麻豆精品久久久| 久久久久久九九九九九| 久久夜色精品一区| 免费高清不卡av| 欧美激情 一区| 日韩一区二区在线免费观看| 有码一区二区三区| av在线天堂网| 小毛片在线观看| 91福利精品视频| 国产欧美精品一区aⅴ影院| 久久er99热精品一区二区| 中文字幕第10页| 久久国产精品国语对白| 国产精品久久久久久久久免费桃花| 精品在线播放午夜| 久久久午夜精品福利内容| 欧美日韩中文另类| 亚洲国产日产av| 国产激情在线免费观看| 久久久一区二区三区捆绑**| 麻豆91在线看| 亚洲一区二区三区综合| 91精品国产综合久久久久| 亚洲高清中文字幕| a天堂中文字幕| 国产精品素人视频| 国产馆精品极品| 在线观看日产精品| 久久精品国产在热久久| av最新在线观看| 亚洲欧美日韩一区二区| av网页在线观看| 91精品国产乱码久久蜜臀| 视频一区二区不卡| 91蜜桃免费观看视频| 中文字幕在线有码| 国产精品久久久久久久久快鸭| 国产盗摄女厕一区二区三区| 五月天婷婷色综合| 欧美日韩卡一卡二| 久久久影院官网| 日本免费新一区视频| 成人三级做爰av| 欧美精品三级在线观看| 午夜欧美一区二区三区在线播放| 高清国产一区二区| 爱爱的免费视频| 欧美极品美女视频| av中文字幕不卡| 三级影片在线看| 69久久夜色精品国产69蝌蚪网| 亚洲妇女屁股眼交7| 五月激情综合网| 日本人妻一区二区三区| 欧美精品一区视频| 免费观看一级欧美片| 在线观看国产三级| 欧美日韩视频不卡| 婷婷国产v国产偷v亚洲高清| 国产在线综合视频| 中文字幕日本不卡| 亚洲精品成人无码毛片| 91麻豆精品国产91久久久久久久久 | 超碰人人人人人人人| 欧美日韩一级片在线观看| 亚洲成人自拍偷拍| 黄色av电影网站| av女名字大全列表| 麻豆精品一二三| 三级黄色录像视频| 亚洲欧美日韩国产另类专区| 中文字幕无人区二| 国产片一区二区| 97精品国产97久久久久久久久久久久| 欧美日韩一区中文字幕| 日本成人在线一区| 日本一级免费视频| 欧美激情一区二区三区在线| 成人一区二区三区仙踪林| 久久精品免费在线观看| 91影院在线观看| 欧美一区二区三区免费| 亚洲综合一区二区三区| 东京热无码av男人的天堂| 亚洲综合色噜噜狠狠| 800av在线播放| 久久综合色婷婷| 成人av资源下载| 国产亚洲福利社区一区| 麻豆精品在线观看| 51精品视频一区二区三区| 中文字幕欧美视频| 最新国产成人在线观看| 亚洲第一香蕉网| 国产精品无遮挡| mm131美女视频| 亚洲精品午夜久久久| 亚洲精品理论片| 亚洲欧美在线另类| 日本最新不卡在线| 色狠狠av一区二区三区| 扒开伸进免费视频| 一区二区三区高清| 欧美日韩一区二区在线观看| 波多野结衣中文一区| 国产精品区一区二区三区| 91女厕偷拍女厕偷拍高清| 一区二区三区中文在线观看| 欧美系列日韩一区| 99视频有精品| 一区二区在线观看视频在线观看| 91l九色lporny| 蜜桃精品在线观看| 宅男在线国产精品| 亚洲自拍偷拍精品| 日韩精品乱码免费| 精品国产青草久久久久福利| 乱老熟女一区二区三区| 国产成人综合在线观看| 亚洲欧美国产77777| 欧美精品在线一区二区| 永久免费毛片在线观看| 国产一区二区三区在线观看免费| 中文成人av在线| 亚洲欧美va天堂人熟伦| 中文字幕不卡在线播放| 麻豆一区在线观看| 久久99国产精品久久99| 欧美日韩一区二区在线观看视频 | 中文字幕av一区二区三区高| 国产精品久久久久久久精| av电影一区二区| 亚洲欧美日韩一区二区| 国产传媒免费在线观看| www.亚洲精品| 一区二区高清视频在线观看| 国产色无码精品视频国产| 久久久久久久久久久久国产精品| 深夜福利网站在线观看| 99热99精品| 91蜜桃免费观看视频| 精品一区二区av| 天天色 色综合| 国产日韩精品一区二区浪潮av| 国产精品乱码久久久久久| 久久女同精品一区二区| 欧美三区免费完整视频在线观看| 潮喷失禁大喷水aⅴ无码| 国产三级aaa| 亚洲成人av免费观看| 精品一区二区三区的国产在线播放| 欧美亚洲国产一卡| 日本乱子伦xxxx| 2019男人天堂| 国产黄色大片免费看| 国产sm调教视频| 日本一级片在线播放| 国产精品综合网| 亚洲超碰97人人做人人爱| 久久久九九九九| 精品视频999| 国产馆在线观看| 亚洲不卡在线播放| 日本中文字幕精品| 大白屁股一区二区视频| 蜜桃视频免费观看一区| 一区二区三区成人在线视频| 欧洲生活片亚洲生活在线观看| 97se亚洲国产综合自在线观| 国产成人精品一区二区在线小狼| 99久久综合精品| 亚洲色图欧美另类| japanese在线观看| 波多野吉衣中文字幕|