首页 > 其他分享 >vue-element-admin改为从后台拿动态指令权限(按钮)- 下

vue-element-admin改为从后台拿动态指令权限(按钮)- 下

时间:2023-07-20 14:46:00浏览次数:32  
标签:vue permission admin element 指令 directives 后台 checkPermission 权限

改为从后台拿动态指令权限,大概如下步骤:

1、后台修改接口返回 指令权限 数据

2、修改 src/store/modules/permission.js 修改 generateRoutes,添加保存 指令权限

3、修改验证指令去权限方法(checkPermission: src/utils/permission.js、v-permission: src/diective/permission/permission.js)

 一、后台修改接口返回 指令权限 数据

后续想根据后台接口权限一样的判断方式,按照 sys:role:list 方式判断,具体还没想好。所以这里先在接口返回中添加 directives 字段。代码如下:

        List<String> directiveList = new ArrayList<>();
        directiveList.add("sys:role:list");
        directiveList.add("ft:edit_test_case");
        retMap.put("directives", directiveList);

二、修改 generateRoutes 将 指令权限 存入 store 中

代码如下:这个地方很简单,就是在上一次修改路由的地方添加存 store 的方法

const state = {
  routes: [],
  addRoutes: [],
  directive_permission: [] // 指令权限
}

const mutations = {
  SET_ROUTES: (state, routes) => {
    state.addRoutes = routes
    state.routes = constantRoutes.concat(routes)
  },
  // 设置指令权限
  SET_DIRECTIVES: (state, directives) => {
    state.directives = directives
  }
}

const actions = {
  generateRoutes({ commit }, roles) {
    return new Promise(resolve => {
      // 从后台请求到的路由
      getPermission().then(response => {
        // 整理后台返回的路由
        let accessedRoutes = response.data.routes.filter(item => {
          return pruningRoutes(item)
        })

        // 拿回后台返回数据后,设置指令权限
        // todo:这里后续还要加整理数据代码,可能后台会返回如下格式 [{"directive":{"name":"sys:role:list","role":["admin","user"]}},{"directive":{"name":"ft:edit_test_case","role":["user"]}}]
        // 最终 directives 保存的是改用户角色下所有的指令权限的字符数组
        let accessedDirectives = response.data.directives
        commit('SET_DIRECTIVES', accessedDirectives)

        accessedRoutes = accessedRoutes.concat(asyncRoutes) // 合并异步路由(例如将404页面合并入可访问路由)
        accessedRoutes = filterAsyncRoutes(accessedRoutes, roles) // 通过递归根据角色过滤异步路由

        commit('SET_ROUTES', accessedRoutes)
        resolve(accessedRoutes)
      })
    })
  }
}

三、修改 checkPermission

vue-element-admin 有两个方法可以实现指令级权限控制,一个 checkPermission 方法,一个自定义组件 v-permission。这里先讲 checkPermission 方法。

1、找到前端页面,在需要控制的组件中添加如下代码。这样如果你有新建目录的权限,则能显示此按钮,没有则不显示。

v-if="checkPermission('ft:edit_test_case')"

 2、导入 permission 包,代码如下:

import checkPermission from '@/utils/permission' // 权限判断函数

...... checkPermission,

 3、修改 src/utils/permission.js checkPermission 方法

  

  

四、修改 v-permission 

 

 

 

 

 

  

标签:vue,permission,admin,element,指令,directives,后台,checkPermission,权限
From: https://www.cnblogs.com/rslai/p/17568369.html

相关文章

  • 关于vue3使用setup语法糖获取不到组件实例内部的变量
    //子组件<template><div>{{count}}</div><template<scriptsetup>import{ref}from'vue'constcount=ref(0)</script>//父组件<template><div><Childref="child"/>......
  • vue生成二维码以及获取当前的地址url
    <template> <divclass="hello">  <h2>二维码</h2>  <canvasref="qrCodeCanvas"></canvas><div>{{url}}</div> </div></template><script>importQRCodefrom'qrco......
  • Vuex的例接以及核心属性
    Vuex是vue用户状态管理的,核心就是store(仓库),它的5个核心属性分别是State、Getter、Mutation、Action、Module。state:管理存放数据,包括数组、对象、字符串,只能通过mutations和actions来修改getter:类型计算属性,...mapGetters([""])引用,返回值会根据它的依赖被缓存起来,只有依赖......
  • Vue利用element ui分栏,并将threejs插入到main
    目录1.在node.js官网下载2.在win+r中输入cmd打开管理员:命令提示符3.cmd命令下载安装淘宝镜像上的npm包4.cmd命令安装vuecli,并验证是否安装成功5.通过vueui命令以图形化界面创建和管理项目6.vue项目创建完成,在终端里安装elementui7.在main.js文件中引入element8.利用element进行......
  • html5页面中使用vue组件DEMO
    资源下载npmhttp-vue-loader:https://www.npmjs.com/package/http-vue-loader http-vue-loader.js下载 普通html5使用vue组件1、页面引入相关JS文件 2、创建components组件 3、主页面创建vue实例 引入相关组件名 4、html中使用vue组件 ......
  • 58.请使用vue3+vite+typescript+element-plus+setup语法糖,使用xlsx和file-saver实现保
    1<template>2<div>3<el-table4:data="mergedTableData"5border6stripe7>8<!--表头-->9<el-table-column10prop="date"11label="......
  • vue 学习 day4
    VUE相关的指令: v-html插入原始的html constraw_html="<h1>Helloworld</h1><pv-html="raw_html"></p><!--标签不能再有孩子节点,有的话会报错--> v-bind缩写是":"绑定属性值democonstattri_01="id01";<divv-bi......
  • python flask 使用 vue
    PythonFlask使用Vue引言PythonFlask是一款轻量级的Web开发框架,而Vue是一款流行的JavaScript框架,用于构建交互式的用户界面。结合PythonFlask和Vue可以帮助我们开发出功能强大的Web应用程序。本文将介绍如何使用PythonFlask和Vue来构建Web应用程序,并提供......
  • 前端Vue自定义开屏启动广告组件,点击广告图跳转广告详情
    随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。通过组件化开发,可以有效实现单独开发,单独维护,而且他们之间可以随意的进行组合。大大提升开发效率......
  • vue实现icon刷新动画
    实现点击icon图标,旋转一周 通过ElementUI实现刷新动画<i:class="[refresh_flag?'el-icon-refreshrefreshIcon':'el-icon-refresh']"@click="refreshClick"></i>refreshClick点击时refresh_flag状态为true,接口数据返回成功后再变为false .ref......