vue路由实现权限管理,vue动态路由实现权限控制

  vue路由实现权限管理,vue动态路由实现权限控制

  后台管理系统中经常使用路由控制来限制不同业务人员的访问。本文主要介绍了两种Vue路由权限控制,具有一定的参考价值。有兴趣的可以看看。

  

目录

  方法一:路由元信息(meta)方法二:动态生成路由表(addRoutes)路由权限控制常用于后台管理系统,限制不同业务人员可以访问的页面的权限。

  对于没有权限的页面,可以跳转到404页或者提示没有权限。

  

方式一:路由元信息(meta)

  把所有的页面都放在路由表里,访问的时候只要判断角色权限就可以了。

  Vue-router在构建路由时提供元信息元配置接口。我们可以在元信息中添加路由对应的权限,然后在路由卫士中检查相关权限,控制其路由跳转。

  在元属性中,将可以访问路由的角色添加到角色中。每次登录后,都会返回用户的角色。然后,在访问页面时,将路由的元属性与用户的角色进行比较。如果用户的角色在路由的角色中,那么它可以被访问,如果不是,那么它将被拒绝。

  示例1:根据角色判断

  const myRouter=new VueRouter({

  路线:[{

  路径:“/login”,

  名称:登录,

  元:{

  角色:[管理员,用户]

  },

  component:()=import( @/components/log in )

  },{

  路径:“/home”,

  姓名:家,

  元:{

  角色:[admin]

  },

  组件:()=导入( @/views/Home )

  },{

  路径:“/404”,

  组件:()=导入( @/组件/404 )

  }]

  })

  //假设通过接口从后台获取的用户角色可以存储在token中。

  常量角色=用户

  myRouter.beforeEach((收件人,发件人,下一个)={

  if(to . meta . roles . includes(role)){

  Next() //释放

  }否则{

  Next({path:/404}) //跳到第404页

  }

  })

  示例2:向需要权限的元添加一个ID。

  const myRouter=new VueRouter({

  路线:[{

  路径:“/login”,

  名称:登录,

  元:{

  标题:“登录页面”

  图标:“登录”

  },

  component:()=import( @/components/log in )

  },{

  路径:“/home”,

  姓名:家,

  元:{

  标题:“主页”

  图标:“主页”,

  要求验证:真

  },

  组件:()=导入( @/views/Home )

  },{

  路径:“/404”,

  组件:()=导入( @/组件/404 )

  }]

  })

  myRouter.beforeEach((收件人,发件人,下一个)={

  let flag=to . matched . some(record=record . meta . require auth);

  //这里用matched循环找到不直接用to.meta的原因:

  //当存在子路由时,首先按照正常的点击逻辑,明确一级路由之后是二级路由,权限的判断必须一致。

  //to.meta=直接搜索子路由的meta。如果一级路由没有添加requireAuth:true,那么一级路由的页面应该已经被屏蔽,无法进入二级路由的页面。如果用户直接篡改网址地址栏就可以进入二级页面,权限可能有问题。那么这个权限下的所有路由都要做标记。

  //to.matched=matched是一个路由数组,它将集合所有路由的属性,包括子路由。所以通过循环判断查找的方式,你只需要给一级路由加上权限标识,就可以授权它下面的其他子路由了。

  如果(标志){

  下一个()

  }否则{

  下一步({路径:/404})

  }

  })

  缺点:检查每一个路由跳转都是浪费计算资源。另外,用户无权接入的线路,理论上不应该挂载。

  

方式二:动态生成路由表(addRoutes)

  通过根据用户权限或用户属性动态添加菜单和路由表,可以定制用户的功能。

  Vue-router提供了addRoutes()方法,可以动态注册路由。需要注意的是,动态添加路由是在路由表中推送路由。由于路由是按顺序匹配的,所以有必要将404页这样的路由放在动态添加的末尾。

  //store.js

  //将需要动态注册的路由提取到vuex中

  const dynamicRoutes=[

  {

  路径:“/管理”,

  名称:管理,

  元:{

  要求验证:真

  },

  组件:()=导入(。/查看/管理’)

  },

  {

  路径:“/userCenter”,

  名称:“用户中心”,

  元:{

  要求验证:真

  },

  组件:()=导入(。/views/user center’)

  }

  ]

  在vuex中添加userRoutes数组来存储用户定制的菜单。根据后端返回的菜单生成setUserInfo中用户的路由表。

  //store.js

  setUserInfo (state,userInfo) {

  state.userInfo=用户信息

  State.auth=true //获取用户信息后,将auth标记为true。当然也可以直接判断userInfo。

  //生成用户路由表

  state . user routes=dynamic routes . filter(route={

  返回userinfo . menus . some(menu=menu . name===route . name)

  })

  router . add routes(state . user routes)//注册路由

  }

  修改菜单呈现

  //App.vue

  div id=nav

  路由器链接到=/主页/路由器链接

  Router-link to=/login 登录/router-link

  模板v-for=store . state . userinfo . menus 的(menu,index)

  router-link:to= { name:menu . name } :key= index { menu . title } }/router-link

  /模板

  /div

  关于Vue实现两种路由权限控制方法的文章到此为止。更多相关Vue路由权限控制内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: