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

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


一直以来,我也知道可以通过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. Ubuntu18.04上安装N卡驱动、CUDA、CUDNN三连

    环境:Ubuntu18.04 显卡驱动真的挺方便的,CUDA和CUDNN还是踩了一些坑2333 1.安装显卡驱动 安装ubuntu更新或sudo apt-get update & sudo a ...

  2. Flutter移动电商实战 --(25)列表页_使用Provide控制子类-1

    主要是二级分类的UI布局 生成我们的右侧动态类 定义list变量 开始写里面的子项,把每一个小的写了 再拼成一个大的 这样我们的小类就写完了 开始写我的大类别:是一个横向的ListView.写横向的L ...

  3. centos7 设置 mysql 开机自启

    前述 CentOS 7是目前较为流行的Linux发行版本.CentOS 7比起之前版本有了许多的变更.如firewall不在用iptables管理,而交由firewall-cmd管理.同样的,在Cen ...

  4. Flutter移动电商实战 --(19)首页_火爆专区商品接口制作

    Dart中可选参数的设置 上节课在作通用方法的时候,我们的参数使用了一个必选参数,其实我们可以使用一个可选参数.Dart中的可选参数,直接使用“{}”(大括号)就可以了.可选参数在调用的时候必须使用p ...

  5. JAVA的main方法

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方 法有很大的不同,比如方法的名字必须是main,方法必须 ...

  6. 【Java/JDBC】借助ResultSetMetaData,从数据库表中抽取字段信息存成Excel文件

    本例工程下载:https://files.cnblogs.com/files/xiandedanteng/FindNotnullColumns20191102-3.rar 工作中曾有个为42张表建立测 ...

  7. 重学C语言

    重学C语言 #include <stdio.h> int main() { ; ; printf("I am %d year old.\n",age); printf( ...

  8. JAVA 基础编程练习题37 【程序 37 报数】

    37 [程序 37 报数] 题目:有 n 个人围成一圈,顺序排号.从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 问最后留下的是原来第几号的那位. package cskaoy ...

  9. Android之View的内容

    View的事件体系 本章介绍View的事件分发和滑动冲突问题的解决方案. 3.1 view的基础知识 View的位置参数.MotionEvent和TouchSlop对象.VelocityTracker ...

  10. Facebook程序员跳楼事件:技术路线会越走越窄吗?

    这是小川的第417次更新,第450篇原创 这几天有个刷屏的文章,讲的是Facebook有位程序员跳楼了,这位程序员的一些信息也"被曝光",比如年轻时是浙大的学霸,后来又赴美读硕,中 ...