提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结

前言

分享最近在学习VueRouter时配置动态路由和权限管理的一点小心得

一、VueRoute是什么?

vue-router是Vue官方推出的路由管理器,主要用于管理URL,实现URL和组件的对应,以及通过URL进行组件之间的切换,从而使构建单页面应用变得更加简单。这篇文章针对vue-router对应的工作原理进行详细讲解。

单页面应用( SPA)的核心思想之一,就是更新视图而不重新请求页面,简单来说,它在加载页面时,不会加载整个页面,只会更新某个指定的容器中的内容。对于大多数单页面应用,都推荐使用官方支持的 vue-route

二、 先配置动态和静态路由

代码如下:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Layout from '@/views/layout/Layout'
import Login from '@/views/login/Login'import local from '@/utils/local';    // 自己写的存储方法Vue.use(VueRouter)        //使用路由// 静态路由
const routes = [// 登录{path: '/login',component: Login,hide: true    // 不是菜单},// 布局{path: '/',component: Layout,redirect: '/home',     //重定向meta: { title: '后台首页' },children: [{path: '/home',component: () => import('@/views/home/Home')}]},
]
// 公共路由添加
const router = new VueRouter({ routes })//动态路由
const dynamicRoutes = [// 订单管理{path: '/order',component: Layout,redirect: '/order/order-list',meta: { title: '订单管理', roles: '', icon: 'el-icon-document' },    children: [{path: '/order/order-list',meta: { title: '订单列表', roles: '' },component: () => import('@/views/order/OrderList')},{path: '/order/order-edit',meta: { title: '订单编辑', roles: 'super' },component: () => import('@/views/order/OrderEdit')},]},// 商品管理{path: '/goods',component: Layout,redirect: '/goods/goods-list',meta: { title: '商品管理', roles: '', icon: 'el-icon-s-shop' },children: [{path: '/goods/goods-list',meta: { title: '商品列表', roles:'super' },component: () => import('@/views/goods/GoodsList')},{path: '/goods/goods-cate',meta: { title: '商品分类', roles:'' },component: () => import('@/views/goods/GoodsCate')},{path: '/goods/goods-add',meta: { title: '商品添加', roles: '' },component: () => import('@/views/goods/GoodsAdd')},]},// 店铺管理{path: '/shop',component: Layout,redirect: '/shop',meta: { title: '店铺管理', roles: 'super', icon: 'el-icon-s-shop' },children: [{path: '',meta: { title: '店铺列表' },component: () => import('@/views/shop/Shop')}]},// 账号管理{path: '/account',component: Layout,redirect: '/account/account-list',meta: { title: '账号管理', roles: '', icon: 'el-icon-user' },children: [{path: '/account/account-list',meta: { title: '账号列表', roles: 'super' },component: () => import('@/views/account/AccountList')},{path: '/account/account-add',meta: { title: '账号添加', roles: 'super' },component: () => import('@/views/account/AccountAdd')},{path: '/account/modify-pwd',meta: { title: '修改密码', roles: '' },component: () => import('@/views/account/ModifyPassword')},{path: '/account/personal',meta: { title: '个人中心', roles: '' },component: () => import('@/views/account/Personal')},]},// 销售统计{path: '/total',component: Layout,redirect: '/total/goodstotal',meta: { title: '销售统计', roles: 'super', icon: 'iconfont icon-total' },children: [{ path: '/total/goodstotal', meta: { title: '商品统计' }, component: () => import('@/views/total/GoodsTotal') },{ path: '/total/ordertotal', meta: { title: '订单统计' }, component: () => import('@/views/total/OrderTotal') }]},// 给所有空白页配置路由{path: '*',meta: { roles: '' },hide: true,redirect: '/error404'    // 重定向},{path: '/error404',meta: { roles: '' },hide: true,component: () => import('@/views/error/error.vue')}
]export default router    // 默认导出

其中meta中的roles 是为了判断登录的人所拥有的权限而判断的 我只是简单的判断了普通用户和超级管理员用户 可以写成数组 添加多个权限 并且通过includes判断是否拥有访问该路由的权限

2.计算当前登录用户所拥有的权限可以访问的路由(权限控制)

代码如下:

// 计算路由
export function calcRoutes() {let rule = local.get('role')    // 从本地获取当前登录用户权限// local.get('role') 等同于 localStorage.getItem('role')if (!rule) {                // 如果没有获取到权限 则不计算路由渲染菜单return}let allRoutes = []    //计算合并后的路由let menu = []         // 存入本地的数组// 计算路由if (rule === 'super') {// 超级管理员router.addRoutes(dynamicRoutes)           // 可访问路由allRoutes = [...routes, ...dynamicRoutes]  // 计算后合并的路由// 计算菜单menu = allRoutes.filter(v => !v.hide)        // 需要显示出来的菜单} else {// 普通管理员可以访问的菜单和路由let arr = dynamicRoutes.filter(v => {         // 过滤一级路由 if (v.meta.roles.indexOf('super') === -1) {    // 如果找到了super 那么代表管理员才能访问 普通用户无法访问 if (v.meta.roles != 'super') {    // 如果没有super 证明普通用户可以访问if (v.children) {v.children = v.children.filter(c=>c.meta.roles !='super')}}  //过滤二级路由    若有子级则判断子级是否有super 有则不可访问该路由 反正可访问return true}else{return false}})router.addRoutes(arr)                    // 可访问路由allRoutes = [...routes, ...arr]        // 计算后合并的路由// 计算菜单menu = allRoutes.filter(v => !v.hide)    // 需要显示出来的菜单}// 存入本地local.set('menu', menu)
}
calcRoutes()    // 每次刷新页面重新计算路由

需要注意的是 计算路由需要的权限在当前用户登录页面的时候就应该存入本地 然后于index.js页面从本地获取 当然也可以直接用query传值

由于vuerouter本身的BUG 所以需要在根页面的创建后周期里再次调用该函数 以保证在登录之后才从本地取得权限

import {calcRoutes} from '@/router/index';export default {components: {LeftMenu,RightMain},created(){calcRoutes()}};

最终在根页面渲染菜单时即可根据权限实现动态渲染


总结

动态路由的配置其实就是把所有人都可以访问的公共路由设为静态路由 把需要权限控制渲染的路由给一个标记 通过筛选该标记来获取所有需要权限控制的路由 最终计算该路由所需权限来实现菜单的渲染

VueRouter时配置动态路由和权限管理相关推荐

  1. 玩转华为数据中心交换机系列 | 配置动态路由接入M-LAG

    素材来源:华为数据中心交换机配置指南 一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:玩转华为数据中心交换机系列 | 汇总_COCOgsta的博客-CSDN博客 组网需求 如 ...

  2. 华为 eNSP 模拟器配置动态路由(ospf)

    华为 eNSP 模拟器配置动态路由 (ospf) 文章目录 一.实验步骤 1.配置主机 2.配置路由信息 3.相关命令 4.实验资料 一.实验步骤 配置两台主机的ip地址信息 配置路由的ip信息 启动 ...

  3. 计算机网络——配置动态路由实验

    配置动态路由实验 实验目的 实验软件 实验要求 实验知识 实验步骤 实验结果 实验目的 掌握 RIP 协议配置. RIP 协议配置的命令为:router(config)#network <con ...

  4. 华为配置动态路由ISIS协议

    华为配置动态路由ISIS协议 一.路由基础知识 二.路由器配置接口IP地址 (一)配置R1.R2.R3网络 (二)配置R1.R2.R3环回网络接口 (三)测试直连网络 三.启动进程号,配置实体名称 ( ...

  5. 华为 eNSP 模拟器配置动态路由(RIP)

    华为 eNSP 模拟器配置动态路由 RIP 文章目录 一.实验步骤 1.配置主机 2.配置路由信息 3.配置路由(启动RIP协议) 4.测试 5.相关命令 6.实验资料 一.实验步骤 配置两台主机的i ...

  6. Vue 动态路由和权限菜单的实现思路

    为什么不贴代码详细说而是只讲思路呢--对,因为我懒--实际上动态菜单和动态路由的思路还是比较简单的,只是平日只在路由文件里配静态路由什么都不需要多考虑的,一上来可能会有点懵逼,当然这里边也多少有点小坑 ...

  7. 三个路由器配置动态路由

    一.实验环境 三个路由顺序直连: 二.需求描述 采用动态路由的配置方式,实现动态学习路由: 三.实验步骤如所下所示 1.按题目画出拓扑图: 2.启动服务,配置交换机及路由器: *R1的配置* syss ...

  8. Cisco配置动态路由

    一.首先设置网络的拓扑图 如下图所示 路由器选择2811,线选择Serial DEC 和Copper cross-over IP后边的/24是子网掩码简写255.255.255.0 二.配置主机IP网 ...

  9. 微服务升级_SpringCloud Alibaba工作笔记0010---Gateway配置动态路由

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 上一节说的网关的两种配置方式中的第二种,通过代码配置路由 现在来说通过网关gateway实现动态路 ...

最新文章

  1. 薪资被「倒挂」,别慌,咱们用实力说话
  2. Pod Preset玩转K8S容器时区自动配置
  3. [YTU]_2575( 交通工具信息)
  4. 科学计算机怎么调亮度,LED显示器背光很刺眼怎么办?显示器刺眼如何设置?
  5. Oracle Database 12c DBA文官手册(第8版)——第5章 开发和实现应用程序
  6. 如何使用Hugepage参数
  7. 数据:本周DOT将解锁476.59万枚 上周共质押171.2万枚
  8. 腾讯云的云数据库MYSQL配置
  9. Turbo码 - 接近完美的编码
  10. SAS入门 (二)--宏
  11. bios sgx需要开启吗_Win10改Win7,UEFI改Legacy 启动,修改BIOS大全
  12. 智能制造与供应链管理趋势
  13. 锁定计算机好在下游戏吗,用windows7系统锁定计算机防止孩子沉迷游戏
  14. 洛谷P4238:【模板】多项式求逆
  15. 微商城分销系统开发方式需求与价格开发周期评估
  16. Bandwagon安装禅道记录
  17. UVA 1625—Color Length(ACM/ACPC Daejeon 2011)
  18. 工作记录——tomcat部署web应用常见问题和处理方法
  19. Java中的内部类与匿名内部类详解
  20. 14-vue项目搭建.md

热门文章

  1. 2019暑假五考Ronald(神仙结论题)
  2. mybatis配置mybatis.configuration.map-underscore-to-camel-case=true
  3. datagrip连接mysql数据库失败
  4. 地理信息科学前沿-[热词]
  5. 计算机前沿知识论文,计算机前沿技术论文.pdf
  6. 江西赣州移动宽带DNS
  7. 软考中级备考需要多久?哪个好考?
  8. 奇思妙想:DIY一只机器鱼,先从选择舵机开始
  9. Eclipse RCP开发桌面程序
  10. 快捷键FN+F6改为F6