vue后端返回路由表来进行权限管理,加载指定路由结构,不包含则不加载

  创建vue项目,配置环境变量,后续需要用到。这里只配置生产环境和开发环境。

  项目根目录创建  .env.production  文件

NODE_ENV=production
VUE_APP_URL=http://456.com

  项目根目录创建  .env.development  文件

NODE_ENV=development
VUE_APP_URL=http://123.com

  src目录下创建router文件夹,index文件中的内容为

import Vue from ‘vue‘
import Router from ‘vue-router‘
Vue.use(Router)
var constantRouterMap=[]

export default new Router({
  routes: constantRouterMap,
  mode:‘history‘
})

  在main.js中引入

  在router文件夹下创建_import_development.js

module.exports = file => require(‘@/views/‘ + file + ‘.vue‘).default // vue-loader at least v13.0.0+

  在router文件夹下创建_import_production.js

module.exports = file => () => import(‘@/views/‘ + file + ‘.vue‘)

  这是针对不同环境下对对应文件的加载方法

  在src文件夹下创建perssion.js,请求数据,按需加载组件

  

import router from ‘./router‘
import {
  Message
} from ‘element-ui‘
import axios from ‘axios‘
const _import = require(‘./router/_import_‘ + process.env.NODE_ENV) //获取组件的方法
import Layout from ‘@/views/layout‘ //Layout 是架构组件,不在后台返回,在文件里单独引入

var getRouter //用来获取后台拿到的路由

let IsFirst = true;//是否首次进入页面,避免默认进入地址无权限直接报错

router.beforeEach((to, from, next) => {
  if (!getRouter) { //不加这个判断,路由会陷入死循环
    if (!getObjArr(‘router‘)) {
      axios.get(‘https://www.easy-mock.com/mock/5a5da330d9b48c260cb42ca8/example/antrouter‘).then(res => {
        getRouter = res.data; //后台拿到路由
        saveObjArr(‘router‘, getRouter) //存储路由到localStorage
        router.push(getRouter[0].path);
        routerGo(to, next) //执行路由跳转方法
      })
    } else { //从localStorage拿到了路由
      getRouter = getObjArr(‘router‘) //拿到路由
      routerGo(to, next)

    }
  } else {
    if (to.path == ‘/404‘) {//未加载页面默认会跳转至404页面
      if (IsFirst) {
        IsFirst = false;
        return;
      }
      Message.error(‘您没有权限进入此页面哦,快去联系管理员开通吧!‘);
      return;
    } else {
      next()
    }
  }

})

function routerGo(to, next) {
  getRouter = filterAsyncRouter(getRouter) //过滤路由
  router.addRoutes(getRouter) //动态添加路由
  global.antRouter = getRouter //将路由数据传递给全局变量,做侧边栏菜单渲染工作
  next({
    ...to,
    replace: true
  })
}

function saveObjArr(name, data) { //localStorage 存储数组对象的方法
  localStorage.setItem(name, JSON.stringify(data))
}

function getObjArr(name) { //localStorage 获取数组对象的方法
  return JSON.parse(window.localStorage.getItem(name));

}

function filterAsyncRouter(asyncRouterMap) { //遍历后台传来的路由字符串,转换为组件对象
  const accessedRouters = asyncRouterMap.filter(route => {
    if (route.component) {
      if (route.component === ‘Layout‘) {//Layout组件特殊处理
        route.component = Layout
      } else {
      route.component = _import(route.component)
      }
    }
    if (route.children && route.children.length) {
      route.children = filterAsyncRouter(route.children)
    }
    return true
  })

  return accessedRouters
}

  在main.js引入permission.js文件

  路由表结构

[{
    path: ‘/hdedit‘,
    name: ‘hdEdit‘,
    component: ‘znfsgl/hdEdit/index‘,
  },
  {
    path: ‘/wxtsjl‘,
    name: ‘wxtsjl‘,
    component: ‘znfsgl/wxtsjl/index‘,
  },
  {
    path: ‘/wxsc‘,
    name: ‘wxsc‘,
    component: ‘znfsgl/wxsc/index‘,
  }]

  


返回目录

原文地址:https://www.cnblogs.com/gitByLegend/p/11181353.html

时间: 2024-11-09 01:50:04

vue后端返回路由表来进行权限管理,加载指定路由结构,不包含则不加载的相关文章

Linux的用户与用户组(权限管理)

linux用户与用户.权限管理 用户管理: 1.useradd 创建用户 -c 指定用户描述 -d 指定家目录 默认家目录 /home下同名的目录 -g 指定主组 -G 指定附加组 [注意:一个用户主组只能有一个,而附加组可以有多个] -s 指定shell程序 特殊:/sbin/nologin --> 不容许登陆系统的用户 -u 指定UID -M 不创建家目录 2.userdel -r 带着家目录一块删除 3.usermod - 修改 -c -d -m -g -G -s -u -o(容许UID相

前后端分离实践:基于vue实现网站前台的权限管理

Javascript做为当下的热门语言,用途很广泛,从前端到后端处处可见其存在,该技术如今在我们项目内部也大量使用来开发诸如CMS系统以及其他其他一些数据分析系统的前端页面,为此个人非常感兴趣并将其作为帽子卡的扩展内容来进行课余学习. Javascript框架鳞次栉比,但基本原理大致相同,因此选用国内人开发的vue.js进行一个初步的尝试.学习vue.js也一周多的时间了,说起vue的主要用法,无外乎Declarative Rendering.Component System.Client-si

Spring Boot + Vue 前后端分离开发,权限管理的一点思路

在传统的前后端不分的开发中,权限管理主要通过过滤器或者拦截器来进行(权限管理框架本身也是通过过滤器来实现功能),如果用户不具备某一个角色或者某一个权限,则无法访问某一个页面. 但是在前后端分离中,页面的跳转统统交给前端去做,后端只提供数据,这种时候,权限管理不能再按照之前的思路来. 首先要明确一点,前端是展示给用户看的,所有的菜单显示或者隐藏目的不是为了实现权限管理,而是为了给用户一个良好的体验,不能依靠前端隐藏控件来实现权限管理,即数据安全不能依靠前端. 这点就像普通的表单提交一样,前端做数据

vue基于d2-admin的RBAC权限管理解决方案

前两篇关于vue权限路由文章的填坑,说了一堆理论,是时候操作一波了. vue权限路由实现方式总结 vue权限路由实现方式总结二 选择d2-admin是因为element-ui的相关开源项目里,d2-admin的结构和代码是让我感到最舒服的,而且基于d2-admin实现RBAC权限管理也很方便,对d2-admin没有大的侵入性的改动. 预览地址 Github 相关概念 不了解RBAC,可以看这里企业管理系统前后端分离架构设计 系列一 权限模型篇 实现了RBAC模型权限控制 菜单与路由独立管理,完全

Vue 采用blob下载后端返回的excel流文件乱码问题

没有文件服务器, 前后端采用文件流方式下载,后端返回二进制乱码时,前端使用blob对象进行处理 2.采用的是axios请求方式 this.$http.post("download", { fileName: file.filename }) .then(function(response) { let blob = new Blob([response.data], {type: 'application/vnd.openxmlformats-officedocument.spread

前后端分离进行权限管理之后端生成菜单和权限信息(二)

一.初始化菜单.权限信息 在进行用户名和密码验证成功后就进行权限和菜单的初始化,生成该用户的菜单和权限数据. class LoginView(APIView): authentication_classes = [] # 登陆页面免认证,其余的已经全局配置 def post(self, request, *args, **kwargs): ret = { "data": {}, "meta": { "code": 2001, "mess

Vue电商后台管理系统项目第4篇-权限管理页面实现

优化之前的分配角色功能 实现下拉列表的选项默认选中 为下拉列表的v-model赋值一个id,这个id会对应着下拉列表的value,如果赋值了Value,那么就会让这个value数据所对应的字符串数据显示 我们得先获取到这个用户的rid // 分配角色提交 grantrolesubmit () { if (this.grantForm.rid) { grantUserRole(this.grantForm.id, this.grantForm.rid) .then(res => { if (res

【转】手摸手,带你用vue撸后台 系列二(登录权限篇)

前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自己是一个业务猿,每天被我司的产品虐的死去活来,之前又病了一下休息了几天,大家见谅. 进入正题,做后台项目区别于做其它的项目,权限验证与安全性是非常重要的,可以说是一个后台项目一开始就必须考虑和搭建的基础核心功能.我们所要做到的是:不同的权限对应着不同的路由,同时侧边栏也需根据不同的权限,异步生成.这里先简单说一下,我实现登录和权限验证的思路. 登录:当用户填写完账号和密码后向服务端验证是否正确,验证通过之后,服务端会返回一个token,拿到t

AngularJS中在前后端分离模式下实现权限控制 - 基于RBAC

权限的设计中比较常见的就是RBAC基于角色的访问控制,基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合.每一种角色对应一组相应的权限. 一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限.这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销. 在Angular构建的单页面应用中,要实现这样的架构我们需要额外多做一些事