项目是越写越多,遇到的各种需求当然也逐渐增多。

在一个项目中,实现用户权限,似乎也成了必然。


一直以来,我也知道可以通过vue-router官方提供的一个api-->addRoutes可以实现路由添加的功能,事实上就也就实现了用户权限。

然而,看到官方文档的介绍,似乎也没办法理解怎么个用法。

官方介绍:

函数签名:

router.addRoutes(routes: Array<RouteConfig>)

动态添加更多的路由规则。参数必须是一个符合 routes 选项要求的数组。

就这么一句话,谁能跟我告诉我,我应该怎么用。

所以,一直也没有使用addRoutes来实现用户的鉴权。

近段时间,在整理项目中会常用的一些功能,认为有必要把用户鉴权[addRoutes]捡起来研究一下了。

真正的沉下心来研究的时候,其实也真没什么,似乎也就那么回事。怎么就拖了这么久了。。。

逻辑上,我们该怎么配置路由,还是怎么配置路由,唯一需要注意的地方在于,如果几条路由对用户权限有要求,那么就该稍微谨慎点了。

举个例子来说,系统上,一般情况下会有一个“用户管理”的模块,然而该模块并不需要对所有用户开放,仅仅具有“管理员”权限的用户才能看到该页面,并且进行操作。

那么,如果从源头上掐死,也就是确定是否配置该路由,那就直接确定下来用户是否能够看到该模块了。

基本上也就那么几种方法,常见的有:

export const asyncRoute = [
{
path: '/users',
name: 'Users',
component: () => import('@/views/Users'),
meta: {
title: '用户管理',
icon: 'user'
}
}
]

直接单独配置,然后确定用户是否拥有该权限,利用数组方法concat拼接到其他路由配置当中。

let rs = routes
if (+id === 1) { // id为1时,该用户拥有所有权限
rs = routes.concat(asyncRoute)
}

亦或者,在meta属性里面添加参数以确定是否需要鉴权:

 [
{
path: '/home',
name: 'Home',
component: () => import('@/views/Home'),
meta: {
title: '首页',
icon: 's-home'
}
},
{
path: '/monitor',
name: 'Monitor',
component: () => import('@/views/Monitor/Ing'),
meta: {
title: '设备状态监测',
icon: 'monitor'
}
},
{
path: '/users',
name: 'Users',
component: () => import('@/views/Users'),
meta: {
title: '用户管理',
icon: 'user',
auth: true
}
}
]

比如这种,然后在页面当中利用数组方法filter进行过滤。拥有所有权限,就直接使用,如果没有用户管理的权限,那就过滤掉auth为true的选项。

const routes = [].filter(item => !item.meta.auth)

不管怎么判断,只要区分出具体的权限,剩下的就是官方文档的示例了:

Router.addRoutes([...routes])

这里写上解构,主要是为了强调,addRoutes的参数一定是一个数组,也就是我们在router.config.js文件中配置的数组,格式完全一样。

到这里基本上鉴权就完成了。

需要注意的是,在哪里实现鉴权,可以覆盖到所有组件的.vue文件当中,或者单独写一个peimission.js的文件,类似于vue-element-admin的做法。

一定不能仅仅是在点击“登录”按钮之后做鉴权,毕竟刷新页面也是常见操作。

关于vue-router当中addRoutes的使用的更多相关文章

  1. 深入浅出的webpack4构建工具---webpack+vue+router 按需加载页面(十五)

    1. 为什么需要按需加载? 对于vue单页应用来讲,我们常见的做法把页面上所有的代码都打包到一个bundle.js文件内,但是随着项目越来越大,文件越来越多的情况下,那么bundle.js文件也会越来 ...

  2. Vue 2.0 + Vue Router + Vuex

    用 Vue.js 2.x 与相配套的 Vue Router.Vuex 搭建了一个最基本的后台管理系统的骨架. 当然先要安装 node.js(包括了 npm).vue-cli 项目结构如图所示: ass ...

  3. vue router 只需要这么几步

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. Vue.js 2.x笔记:路由Vue Router(6)

    1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...

  5. Vue Router学习笔记

    前端的路由:一个地址对应一个组件 Vue Router中文文档 一.路由基本使用 第1步:导入Vue Router: <script src="https://unpkg.com/vu ...

  6. vue router.push(),router.replace(),router.go()和router.replace后需要返回两次的问题

    转载:https://www.cnblogs.com/lwwen/p/7245083.html https://blog.csdn.net/qq_15385627/article/details/83 ...

  7. 前端MVC Vue2学习总结(八)——Vue Router路由、Vuex状态管理、Element-UI

    一.Vue Router路由 二.Vuex状态管理 三.Element-UI Element-UI是饿了么前端团队推出的一款基于Vue.js 2.0 的桌面端UI框架,手机端有对应框架是 Mint U ...

  8. 深入浅出的webpack构建工具--webpack4+vue+router项目架构(十四)

    阅读目录 一:vue-router是什么? 二:vue-router的实现原理 三:vue-router使用及代码配置 四:理解vue设置路由导航的两种方法. 五:理解动态路由和命名视图 六:理解嵌套 ...

  9. python 全栈开发,Day91(Vue实例的生命周期,组件间通信之中央事件总线bus,Vue Router,vue-cli 工具)

    昨日内容回顾 0. 组件注意事项!!! data属性必须是一个函数! 1. 注册全局组件 Vue.component('组件名',{ template: `` }) var app = new Vue ...

随机推荐

  1. idea 2018注册码(激活码)

    最近做一个项目,用idea 社区版的   但是缺少了好多功能 无奈只能用专业版的,但是需要注册激活  下面是我的注册方法 1.打开了idea  会提示让激活  选择Licensse server 2. ...

  2. oracle查找表索引信息

    select owner,index_name,index_type from all_indexes where owner='xxxx' and table_name='xxx' select * ...

  3. 微信小程序开发常见坑

    前段时间稍微涉猎了微信小程序开发,踩了一些坑,在此总结出来,希望能为小伙伴们提供一点帮助. 页面跳转 对于页面跳转,可能习惯性想到wx.navigateTo,但是在跳转到目标页面是一个tab时,此接口 ...

  4. zabbix监控项整理Items-key

    agent.hostname:hostname,字符串 agent.ping:可用性检查,可用返回1:不可用返回空 agent.version:agent程序的版本,返回字符串 kernel.maxf ...

  5. LDA线性分析推广到多分类

    感谢皮果提的文章: http://blog.csdn.net/itplus/article/details/12038441 http://blog.csdn.net/itplus/article 皮 ...

  6. RGBD-SLAM(一)——深度摄像机

    一.根据其工作原理主要分为三类: 1. 双目方案: (1) 原理: http://blog.csdn.net/shenziheng1/article/details/52883536 (2)产品: Z ...

  7. springboot之activemq安装与实践

    环境:腾讯云centos7 注意:activemq安装插件,可能会报错.本人是主机名的问题,所以修改了主机名. vim /etc/hosts vim /etc/hostname 修改这两个文件,并重启 ...

  8. JavaWeb MySQL 实现登录验证

    0. 环境准备 项目创建: IDEA 创建 Servlet 项目详细步骤:https://www.jianshu.com/p/386a79d16e05 导入 MySQL 驱动包: Java MySQL ...

  9. 三小时攻克 Kubernetes!

    我保证本文是最详尽的 Kubernetes 技术文档,从我在后台排版了这么漫长的时间就能看出来.废话不多说——牢牢占据容器技术统治地位的 Kubernetes,其重要性想必不言而喻. 以下为译文: 为 ...

  10. systemctl daemon-reload

    systemctl daemon-reload: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载. init 和 sy ...