【项目实战】纯前端实现菜单权限以及功能权限控制

本文介绍了一种纯前端实现的路由权限控制方案,通过将不同角色的权限标识存储于Vuex中,结合路由守卫判断用户是否有访问特定路由的权限,有效防止越权访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来讲一下需求

   我们做项目的时候,最开始功能菜单都是从后端获取的,开发完毕之后,发现可以越权访问没有的路由,其操作是,

登陆高权限的账号,进入功能页,查询的数据,复制当前路由,再登陆低权限的账号,直接复制到地址栏,就能看到高权限账号的页面,

   这样后端就很头大了,由于只能对接口限制,后端监听不到当前路由是什么,而且接口还有复用的功能,做起来就很麻烦。我们就考虑了纯前端做路由权限

 

我先说一下原理,就是登陆账号都会有不同的菜单权限,通过登陆的账号不同做一个规定,账号类型1,权限标示就是1,账号类型2,权限标示就是2,这里账号类型指的就是,是系统管理员,还是普通用户,还是管理员的角色类型,等定义好这了以后,登陆的时候把当前角色存到vuex中,在每次进入路由之前,先判断这个功能路由有没有这个权限,有的话准许进入,没有的话跳转到首页,

 

 

 

好了,话不多说,上代码

在请求登陆的时候,拿到登陆信息,把该账户的权限放到vuex中

if(res.info[0].children.some(it => it.path == approvalHistory)){
                role = 4;
              }else if(res.info[0].children.some(it => it.path == vendorFirstTrial)){
                role = 1;
              }else if(res.info[0].children.some(it => it.path == vendorSecondTrial)){
                role = 2;
              }else if(res.info[0].children.some(it => it.path == vendorFinalTrial)){
                role = 3;
              }
              
              this.$store.commit("setRolePermissions",role)

在src >main.js,的目录下,写判断路由是否跳转到首页的代码

router.beforeEach((to,from,next)=>{
  let homePath = '/admin/home';
  if(to.meta.tabname){
    if(to.meta.keepalive){
      store.commit('pushCacheComp', to.name)
    }
    console.log(to.meta.role, store.state.rolePermission)
    // next();
    if(to.path == homePath || to.meta.role.includes(store.state.rolePermission)){
      next();
    }else{
      if(from.path != homePath){
        
      }
      next(homePath);
    }

接着在路由文件中写上该路由有什么权限  就是role

{
    path: '/admin/vendorFirstTrial',
    name: 'vendorFirstTrial',
    meta: {
      tabname: '厂商备案管理(初审)',keepalive: false,
      breadcrumb: '厂商备案管理(初审)',
      role: [1,5],
    },
    component: vendorFirstTrial
  },
  {
    path: '/admin/checkFirstTrial',
    name: 'checkFirstTrial',
    meta: {
      tabname: '查看厂商备案管理(初审)',keepalive: false,
      breadcrumb: '查看厂商备案管理(初审)',
      role: [1,5],
    },
    component: checkFirstTrial
  },

这样就可以通过不同账户来完美限制不能访问哪些路由了

 

如果你喜欢,请评论、点赞、收藏、转发,你的支持就是我的动力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

new 前端

请博主喝杯咖啡吧!

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

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

打赏作者

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

抵扣说明:

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

余额充值