vue-element-admin权限部分更改

前言

使用文档提供的方法和权限调用逻辑,根据项目的后台数据进行适配性修改。本身vue-element-admin配置的权限逻辑已经很完整清晰了,仅需要我们进行简单的适配就可以了。

一、vue-element-admin的权限逻辑

基本逻辑

    vue-element-admin项目<font size=1>(下面统称项目)</font>提供的方法主要是通过获取当前用户的权限去比对路由表,生成当前用户具有的权限可访问的路由表,通过router.addRoutes动态挂载到router上。
   如果想要页面权限是动态配置的,可以将路由表动态的存储到后端。在使用时调用后端数据根据路由表映射将路由映射到项目中。
const map={
 login:require('login/index').default // 同步的方式
 login:()=>import('login/index')      // 异步的方式
}
//你存在服务端的map类似于
const serviceMap=[
 { path: '/login', component: 'login', hidden: true }
]
//之后遍历这个map,动态生成asyncRoutes
并将 component 替换为 map[component]

逻辑修改

现在路由层面权限的控制代码都在 @/permission.js 中,如果想修改逻辑,直接在适当的判断逻辑中 next() 释放钩子即可。

项目逻辑调用

想要对项目的逻辑权限进行适应性修改就要先去梳理清楚他们提供的底层逻辑,基本上方法和逻辑的调用就是一环套一环。这里利用动态路由添加进行倒推。

1.首先导入动态添加路由和权限控制的

我们从完整项目demo中获取将所需要的权限部分进行引入
在这里插入图片描述
在demo代码项目包中获取整个permission文件夹进行迁移,迁移之后配置一下所需要的js和路由,使项目能够正常打开。(直接引入因为mock问题不能直接使用,所以演示在demo项目上演示,具体步骤不做详细解答)
在这里插入图片描述
在@/store/modules/permission.js文件中我们可以看到动态路由的添加方法,利用roles.includes(‘admin’)去判断获取到的roles中是否包含’admin’字符串,如果包含就打开所有的路由和权限。如果不包含则动态去添加用户所拥有的动态路由。
在这里插入图片描述
向上查找generateRoutes函数接受的两个参数的由来,在这里调用了permission/generateRoutes的方法,传入了roles值。同时可以看到roles的获取,是调用了user/getInfo方法。
在这里插入图片描述
在这里插入图片描述
向上查找getInfo方法的引入,发现是在api文件夹下的user.js中,也就是请求的后端接口。至此项目的主要动态路由和权限的大致流程就已经很清晰了。
在这里插入图片描述

  1. 发起请求从后端获取用户路由和权限信息。
  2. 将获取的信息用参数的形式传递给permission/generateRoutes方法。
  3. 利用获取的roles认证用户所拥有的权限。
  4. 获取到动态路由信息传递给filterAsyncRoutes方法进行路由处理。
  5. 路由处理完成后返回信息。
  6. 利用router.addRoutes(accessRoutes)添加动态路由。

二、对vue-element-admin权限进行适配

分析和了解项目的路由和权限的获取和使用逻辑之后,找到关键点数据请求到之后的roles字段的信息和asyncRoutes动态路由。
在这里插入图片描述
由于项目中与动态路由相关的函数使用设计的地方比较多,所以建议将存储的字段信息向他们定义好的格式转换。

​我们里用项目中的权限管理进行简单修改获取,首先我们定义一下动态增加路由的字段。然后给这些字段进行文件位置指向。
在这里插入图片描述
之后利用接口获取到的接口json数据,去匹配在map中定义的网页地址。在项目中动态增加路由和路由指向。
在这里插入图片描述
下面就需要将我们所配置好的后台接口进行数据的接收和返回了,这里我们定义一个新的api方法。
在这里插入图片描述
去获取level中的数据列表,如果表单存储的格式和项目中使用的方法存在差异的啊话,我们可以写一个方法进行数据的啊清洗。
在这里插入图片描述

  // get Menu
  getMenu({ commit, state }) {
    return new Promise((resolve, reject) => {
      getMenu(state.token).then(reponse => {
        const { data } = reponse
        data.model = JSON.parse(data.model)//获取到存储的数据转换为字符串
        data.model.map(i => {//对数据进行遍历处理
          i.component = Layout//项目默认的路由配置
          i.meta = {//赋值给其name和title
            title: i.name,
            icon: 'table'
          }
          i.children.map(j => {//为子元素进行遍历
            j.meta = {
              title: j.name
            }
          })
        });
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },

在处理完成权限获取之后我们将处理过的数据进行动态路由生成,这就涉及到上面所说的accessRoutes和router.addRoutes(accessRoutes)的使用。将数据通过permission/generateRoutes函数进行处理,然后返回动态路由。(accessRoutes.push({ path: ‘*’, redirect: ‘/404’, hidden: true })最后添加404页面路由,因为当项目检测到404页面之后后面的路由将会被劫持。 )
在这里插入图片描述

          const menu = await store.dispatch('user/getMenu')
          const accessRoutes = await store.dispatch('permission/generateRoutes', menu.model)
          accessRoutes.push({ path: '*', redirect: '/404', hidden: true })
          router.addRoutes(accessRoutes)
`vue-element-admin`是一个非常流行的基于Vue.js的后台管理系统模板,它集成了Element UI组件库,并提供了一系列开箱即用的功能模块。权限控制系统则是其核心功能之一,用于保障系统安全性和数据隐私。 ### 权限控制原理 在`vue-element-admin`中,权限管理通常通过路由守卫(Route Guards)、动态加载菜单以及角色权限校验等机制共同完成: 1. **路由守卫**:利用Vue Router提供的导航钩子函数,在用户访问特定页面前检查是否有足够的权限; 2. **动态侧边栏生成**:根据用户的登录状态及所属角色从服务器端获取对应可见的菜单列表并渲染到界面上; 3. **按钮级别权限判断**:除了对整个页面级别的限制外,还可以针对某些操作按钮单独设置显示隐藏规则,比如编辑、删除等功能是否允许当前用户触发; 4. **权限验证指令**:自定义全局作用域内使用的v-permission directive,方便快捷地应用于各类DOM元素上实现细粒度授权控制; ### 实现步骤简述 假设我们有一个简单场景——管理员拥有所有资源的操作权而普通员工只能查看部分信息,则可以按照以下流程构建相应的权限体系: - 客户端初始化阶段发送请求至后端API查询已认证身份关联的角色标识符(role id)。 - 根据返回结果过滤出该账号所能触及的所有有效路径作为白名单存储于本地缓存之中供后续比对参考。 - 每次切换新视图之前都会经过一层额外的身份审核环节确认是否存在匹配项,若不存在则直接跳转回首页或其他默认位置提示无权浏览。 - 页面内部对于一些敏感区域如修改密码入口处同样需要嵌入类似逻辑确保非法企图得到遏制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值