权限--addRoutes动态生成路由

权限:根据不同身份,访问到的页面不一样。

在后台管理项目中 我们经常会根据不同的用户权限 来动态生成不同的路由导航 以达到权限控制(不同权限生成的路由导航不同)

流程:用户在登录页面输入账号密码====>后端接收判断用户权限====>后端根据不同的用户权限返回对应的导航数据====>前端生成对应的路由导航

   1.  前端页面创建

import Vue from 'vue'
import VueRouter from 'vue-router'
import No from '@/views/No.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/login',
    name: 'login',
    component: () => import('../views/LoginView.vue')
  },
  {
    path:'/',
    redirect:"/login"
  },
  {
    path:"*",
    name:"404",
    component:No

  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

  我只把路由配置展示出来,其他页面的就不展示了

2.登录请求后台 得到不同权限的用户数据

<template>
  <div>
    <h1>用户登录</h1>
      用户名:<input type="text" v-model="text" /> 
      密码:<input type="text" v-model="text1" />
    <button @click="fun">登录</button>
  </div>
</template>

<script>
import Home from "../views/HomeView.vue"
import {link} from "../api/index"
export default {
  data() {
    return {
      text: "",
      text1: "",
    };
  },
  methods: {
    fun() {
      link({uname: this.text,upwd:this.text1}).then((ok)=>{
      // 处理路由数据
      let children=[];
      // 遍历后台数据  生成我们的路由规则
      for(var i=0;i<ok.data.routerdata.length;i++){
          // 这里要先读取  否则在下面得路由拦截在中就没有办法获取了
          let routerdata=ok.data.routerdata[i]
          children.push({
            path:routerdata.path,
            name:routerdata.name,
            component: () => import(`@/views/${routerdata.demo}`)
          })
        }

        
     //将从后端获取的数据保存在本地存储
      window.sessionStorage.setItem("link",JSON.stringify(ok.data.routerdata))

    //判断用户是否登陆成功
     if (ok.data.userid != -1) {
          alert("欢迎您" + ok.data.msg);
     //使用this.$router.addRoutes()动态添加路由
           this.$router.addRoutes([
            {
              path:"/home",
              name:"home",
              // 不要忘了引用home页面 import Home from "@/views/HomeView.vue"
              component:Home,
              children:children//这里的children就是后台给我们的路由数据 但是我们需要处理路由数据
            }
            ])
   //跳转到home页面
          this.$router.push("/home")
        } else {
          alert("用户名密码错误请重新登录");
        }   
      })
      
    
    },
  },
};
</script>

<style>
</style>

3 home页面 

<template>
  <div>
    我是home页面
    <!-- 根据数据遍历生成导航 -->
    <router-link v-for="(v, i) in routerdata" :key="i" :to="'/home/' + v.path"
      >{{ v.name }}
    </router-link>
   <!-- 设置路由出口 -->
    <router-view />
  </div>
</template>

<script>
import { mapState } from "vuex";
export default {
  data() {
    return {
      routerdata: "",
    };
  },
 
  mounted() {
    // 把得到的路由规则转换之后传递给data数据
    this.routerdata = JSON.parse(window.sessionStorage.getItem("link"));
  },
};
</script>

<style>
</style>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值