vue3+element-plus角色权限管理分配

这里的图片是截图这个老师的项目
为了方便大家使用,我会在每个图片下面将代码原封不动打一遍

在src/uitls/permission.js加入以下内容

本段代码讲解:
参数一:后台传来的路由
参数二:前端所有的路由
先遍历前端所有路由,在里面继续遍历后台路由,通过二者某一个关键字的是否相同判断用户是否有权限(这里老师使用的是title关键字),关键字相同理论是可以直接追加了,但是考虑到二级或者三级子内容存在,这里老师做了个递归处理,就是如果当前元素有children属性就给当前元素children属性来个递归处理,最终返回的值就是当前权限所能访问的值

在这里插入图片描述
以下内容和上面图片一致,方便拷贝使用

/**
* 参数1:后台传来的关键字数组,参数二:全部路由数据
*/
export function comparation(userRouter=[],allRouter=[]){
  let realRouter = []
  allRouter.forEach(item=>{
    userRouter.forEach(v=>{
      if(item.meta,title===v.title){
        //注意children
        if(item.children && item.children.length>0){
          item.children=comparation(v.children,item.children)
        }
        realRouter.push(item)
      }
    })
  })
  return realRouter
}
这个代码是在vuex里面写的,基本都有注释

代码解释: 这段代码老师定义了路由集合数据,是真正的需要展现到页面的数据(这里老师还用了个导航菜单,本人没用到,直接通过路由生成的菜单,后台传过来的数据或者前台定义的路由表每个人都不一样,这个主要是理解这个权限管理思路),中间的mutation定义了路由表和菜单的设置与消失,在action里面的方法才是真正的核心,里面发送了当前用户的角色的请求,然后引入刚刚上面模块定义的方法给用户设置权限,最后添加到vuex和路由中

在这里插入图片描述
在这里插入图片描述
以上两张图片是连在一起的
以下内容和上面两张图片一致,方便拷贝使用

import { comparsion } from "@/uitl/comparsion";
export default {
  namespaced: true,
  state: {
    routerList: null, //真正的路由
    sideBar: [], //导航菜单
  },
  mutations: {
    set_routerList(state, data) {
      state.realRouter = data;
    },
    clear_routerList(state, data) {
      state.realRouter = null;
    },
    set_sideBar(state, data) {
      state.sideBar = data;
    },
    clear_sideBar(state, data) {
      state.sideBar = [];
    },
  },
  actions: {
    async gat_routers({ commit }, data) {
      //获取比对路由
      let routers = await login("/login", { username: "admin" }).then((res) => {
        return res.data.router;
      });
      //导航菜单
      commit("set_sideBar", routers[0].children);
      // 比对路由(参数一是上面后台返回的关键字数组,参数二是所有路由,需要导入)
      let realRouter = comparation(routers, allRouter);
      console.log(realRouter);
      // 存储到vuex
      commit("set_routerList", realRouter);
      // 动态添加路由
      router.addRoutes(realRouter); //这是vue2写法,vue3版本的router4版本没有addRoutes,只有addRoute
      //以下是我本人的写法(vue-router4版本只能通过循环一个一个加)
      // realRouter.forEach((item) => {
      //   router.addRoute(item);
      // });
    },
  },
};
这里老师做了前置守卫

代码说明:
在每次路由跳转都去获取一次角色身份(这点个人不太建议,其一:每次路由更改都要获取请求和添加路由表等,感觉麻烦,本人在路由父级(第一层路由)那里设置onMonend生命周期去调用的)

在这里插入图片描述
以下内容和上面图片一致,方便拷贝使用

router.beforeEach((to, from, next) => {
 if(!getToken()){ //没有登录
  if(to.meta.token){//需要登录
    next({
      path:"/login"
    })
  }else{
    next()
  }
 }else{ //登录
    //判断权限
    if(!store.state.permission.routerList){//没有路由
      //获取路由
      store.dispatch('permission/gat_routers').then(()=>{
        console.log(1000);
        next()
      })
    }
 }
})

这里附上老师的视频教程,只需要看我链接这个后半部分视频就够了,前面没啥用,后半部分是核心

本人遇到的bug

在路由前置守卫中动态添加路由,刷新路由页面一片空白找不到页面,表示在路由添加之前就已经在访问路由了,同时经查阅官方文档看到有一个提示
在这里插入图片描述
在代码中,router.addRoute的触发是在路由导航守卫中检测到当前未保存动态菜单信息(vuex)。在这之后用next()放行,而根据官方提示和控制台相关打印信息可以看到,warn提示在addRouter添加路由之前,所以解决方法是将next()改为next(to),触发新的一个导航,此时可以正确匹配到动态路由的相应地址。这个next(to)放在添加路由的vuex方法后

   store.dispatch('permission/gat_routers').then(()=>{
        console.log(1000);
        next(to)  //这样可解决白屏问题
      })
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: vue3-element-plus-admin是一个基于Vue3和Element Plus的后台管理系统模板。它提供了丰富的界面组件和功能,可以快速搭建起一个功能完善的后台管理系统。 首先,vue3-element-plus-admin使用了Vue3作为核心框架,Vue3相比于Vue2在性能和开发体验上有很大的提升。Vue3采用了更先进的响应式机制,使得数据更新更高效;新的组合式API让开发者可以更灵活地组织代码和复用逻辑。 其次,vue3-element-plus-admin还使用了Element Plus作为UI组件库。Element Plus是一套基于Element UI的升级版本,提供了更丰富的UI组件和更好的自定义性。通过Element Plus的组件,我们可以轻松实现表格、表单、弹窗、导航等常见的后台管理功能。 此外,vue3-element-plus-admin还提供了一些常用的功能模块,比如权限管理、用户管理、角色管理等。通过这些功能模块,我们可以方便地进行用户身份验证和权限控制。同时,vue3-element-plus-admin还提供了数据可视化的功能,可以将后台数据以图表的形式展示,帮助我们更好地理解和分析数据。 总的来说,vue3-element-plus-admin是一个功能强大、易于使用和可定制化的后台管理系统模板。它使用了Vue3和Element Plus的最新技术,并提供了丰富的界面组件和功能模块,帮助开发者快速搭建起一个现代化的后台管理系统。无论是个人项目还是企业应用,vue3-element-plus-admin都是一个值得选择的工具。 ### 回答2: Vue3-Element Plus-Admin是一个基于Vue3和Element Plus的后台管理系统模板。它提供了一套完整的UI组件库,以及丰富的功能和布局样式,方便开发者快速搭建和定制自己的后台管理系统。 Vue3是Vue.js的最新版本,它在性能和开发体验上做了很多改进。相比于之前的版本,Vue3使用了更加高效的响应式系统,并且在编译和渲染方面也做了优化,提升了应用的性能。同时,Vue3还引入了新的特性和语法糖,让开发更加简洁方便。 Element Plus是一套基于Element UI的UI组件库,它提供了丰富的UI组件,包括按钮、表单、表格、弹窗等,使用起来非常直观和方便。Element Plus的组件也支持按需加载,可以根据项目需求来引入需要的组件,减小项目的体积。 Vue3-Element Plus-Admin结合了Vue3和Element Plus的优势,为开发者提供了一套完整的后台管理系统模板。开发者可以通过这个模板快速搭建后台管理系统,并根据自己的需求来进行自定义。模板提供了常见的功能和布局样式,包括登录、主页、菜单导航、表单、表格等,开发者只需根据具体业务需求进行修改和扩展即可。 总结来说,Vue3-Element Plus-Admin是一个基于Vue3和Element Plus的后台管理系统模板,它提供了一套完整的UI组件库和丰富的功能和布局样式,方便开发者快速搭建和定制自己的后台管理系统。 ### 回答3: vue3-element-plus-admin 是一个基于 Vue3 和 Element Plus 的后台管理系统框架。它使用了最新的 Vue3 版本,具有更高的性能和更好的开发体验。Element Plus 是一套基于 Vue3 的 UI 组件库,提供了丰富的组件来构建前端界面。 vue3-element-plus-admin 提供了一套完整的后台管理系统解决方案。它包括了常见的登录、权限管理、用户管理、角色管理、菜单管理等功能。使用它可以快速搭建一个功能完善的后台管理系统。 该框架采用模块化的开发方式,将各个功能模块拆分成独立的组件,有利于代码的复用和维护。同时它还使用了响应式设计,可以根据屏幕大小自动适应不同的设备,提供更好的用户体验。 在界面设计上,vue3-element-plus-admin 内置了 Element Plus 的样式,提供了整洁美观的界面效果。同时,它还支持自定义主题,可以根据需求进行样式的定制,满足不同项目的需求。 该框架还提供了丰富的插件和工具,如富文本编辑器、数据可视化图表、国际化支持等,方便开发者快速添加各种功能和扩展。 总之,vue3-element-plus-admin 是一个强大的 Vue3 后台管理系统框架,具有丰富的功能和灵活的扩展性,适用于各种中小型项目的快速开发。它提供了优秀的开发体验和用户体验,帮助开发者轻松搭建出优秀的后台管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧寂173

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值