首页 > 其他分享 >vue 项目中使用v-permission 实现按钮级权限控制

vue 项目中使用v-permission 实现按钮级权限控制

时间:2024-06-05 11:56:57浏览次数:14  
标签:src vue const roles permission js 按钮 store

在使用 vue-element-admin 框架进行开发时,您可以通过自定义指令来实现按钮级的权限控制。这个自定义指令可以根据用户的权限动态地控制按钮的显示。以下是一个详细的实现步骤:

1、在 src 目录下按照如下目录结构,创建一个权限文件,例如 permission.js

目录结构:src/directive/permission/permission.js

// src/directive/permission/permission.js

import store from '@/store'

export default {
  inserted(el, binding) {
    const { value } = binding
    const roles = store.getters && store.getters.roles

    if (value && value instanceof Array && value.length > 0) {
      const permissionRoles = value

      const hasPermission = roles.some(role => {
        return permissionRoles.includes(role)
      })

      if (!hasPermission) {
        el.parentNode && el.parentNode.removeChild(el)
      }
    } else {
      throw new Error(`need roles! Like v-permission="['admin','editor']"`)
    }
  }
}

2、在同个目录下创建一个指令注册文件,例如 index.js

目录结构:// src/directive/permission/index.js

// src/directive/permission/index.js

import Vue from 'vue'
import permission from './permission'

Vue.directive('permission', permission)

3、main.js 文件中引入并注册这个指令

// src/main.js

import Vue from 'vue'
import App from './App.vue'
import store from './store'
import router from './router'
import '@/directive/permission' // 引入权限控制指令

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})

4、在组件中使用自定义指令

在任何需要权限控制的地方使用 v-permission 指令。例如:

<template>
  <div>
    <button v-permission="['admin']">Admin Button</button>
    <button v-permission="['editor', 'admin']">Editor or Admin Button</button>
  </div>
</template>

<script>
export default {
  name: 'PermissionExample'
}
</script>

5、确保在 Vuex Store 中有 roles 的 getter

// src/store/getters.js

const getters = {
roles: state => state.user.roles
// 其他getters...
}
export default getters

并确保在 src/store/modules/user.js 中有 roles 的状态:

// src/store/modules/user.js

const state = {
  roles: []
  // 其他状态...
}

const mutations = {
  SET_ROLES: (state, roles) => {
    state.roles = roles
  },
  // 其他mutations...
}

const actions = {
  // 其他actions...
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

6、在用户登录后设置用户的权限

// src/store/modules/user.js

const actions = {
  // 登录后获取用户信息,包括权限
  async getUserInfo({ commit }) {
    // 假设从 API 获取用户信息
    const { roles } = await api.getUserInfo()
    commit('SET_ROLES', roles)
  }
  // 其他actions...
}

通过上述步骤,您可以在 vue-element-admin 项目中实现按钮级的权限控制。每个按钮根据 v-permission 指令动态显示或隐藏,确保只有拥有相应权限的用户才能看到和操作这些按钮。

 

5.6 就是确保用户登录后,将角色清单存储在store中的。然后验证时,从store中获取。

 

注我的个人公众号,每日更新,获取更多技术知识

标签:src,vue,const,roles,permission,js,按钮,store
From: https://www.cnblogs.com/fei686868/p/18232727

相关文章

  • Vue 获取组件名称
    Vue2获取组件名称获取方式:this.$options.name解读:通过Vue2的 this 关键字,可以很容易地访问Vue组件实例对象身上的 $options 的name属性来获取组件名称。 <script>exportdefault{name:"Brand",mounted(){//Brandconsole.log(this.$options.......
  • vue动态加载组件import引入组件找不到组件(Error: Cannot find module)
    更多ruoyi-nbcio功能请看演示系统gitee源代码地址前后端代码:https://gitee.com/nbacheng/ruoyi-nbcio演示地址:RuoYi-Nbcio后台管理系统http://218.75.87.38:9666/更多nbcio-boot功能请看演示系统 gitee源代码地址后端代码:https://gitee.com/nbacheng/nbcio-boot前端......
  • 毕业设计-基于Springboot+Vue的影城管理系统的设计与实现(源码+LW+包运行)
    如需完整项目,请私信博主基于SpringBoot+Vue的影城管理系统开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven互联网发展至今,已经解决了很多我们解决不了的难题,使得我们工作更加便捷,提高了我们的工作效率。目前各行各业都在运用网络信......
  • 毕业设计-基于Springboot+Vue的音乐网站与分享平台 的设计与实现(源码+LW+包运行)
    如需完整项目,请私信博主基于SpringBoot+Vue的音乐网站与分享平台开发语言:Java数据库:MySQL技术:SpringBoot+MyBatis+Vue.js工具:IDEA/Ecilpse、Navicat、Maven互联网发展至今,已经解决了很多我们解决不了的难题,使得我们工作更加便捷,提高了我们的工作效率。目前各行各业都在运用......
  • Vue 前端页面利用MediaRecorder实现音频录制
    Don'tTalk,codeishere:重点是startRecord方法<template><div><el-tooltipclass="item"effect="dark"content="再次点击【开始录音】即为重新录制,之前录制的将被作废"placement="top"><el-button:disabled=......
  • 如何在启动活动或启动活动结果中只在导航栏上显示返回按钮
    我在pax设备上使用启动器应用程序,其中有一个打开显示设置的选项,点击该选项后,它将导航到Android显示设置,并且只显示返回按钮。以下是用户界面:......
  • Vue前端实现接收rabbitMQ及时消息 原
    https://blog.csdn.net/dawnStart/article/details/110479833打开APPVue前端实现接收rabbitMQ及时消息原创2020-12-0214:03:11阅读量1.4wAI必读dawnStart码龄4年关注Vue前端实现实时接收rabbitMQ及时消息,看了别人写的不太详细1.rabbitMQ安装Stom插件2.Vu......
  • Vue3-shallowRef与shallowReactive
    shallowRef作用:创建一个响应式数据,但只对顶层属性进行响应式处理。用法:letmyVar=shallowRef(initialValue);特点:只跟踪引用值的变化,不关心值内部的属性变化。shallowReactive作用:创建一个浅层响应式对象,只会使对象的最顶层属性变成响应式的,对象内部的嵌套属......
  • Vue3-Pinia状态管理器
    Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态。如果你熟悉组合式API的话,你可能会认为可以通过一行简单的 exportconststate=reactive({}) 来共享一个全局状态。对于单页应用来说确实可以,但如果应用在服务器端渲染,这可能会使你的应用暴露出一些安全漏洞......
  • vue后台用户路由权限和按钮权限实现原理
    概论主要是通过一个唯一标识name或者id来过滤判断用户所处的角色是否有路由的权限或者按钮的权限一般路由都有一个一个name可以作为唯一标识一般按钮的话,可以自定义一个name作为标识业务逻辑后台通过选中路由或者按钮给角色,代表这个角色有数组中name[]的权限,用户或者部门再......