iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用Vuex实现Vue后台管理中的角色鉴权
  • 466
分享到

怎么使用Vuex实现Vue后台管理中的角色鉴权

2023-06-30 17:06:41 466人浏览 安东尼
摘要

这篇文章主要介绍“怎么使用Vuex实现Vue后台管理中的角色鉴权”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Vuex实现Vue后台管理中的角色鉴权”文章能帮助大家解决问题。功能分析在常见管

这篇文章主要介绍“怎么使用Vuex实现Vue后台管理中的角色鉴权”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Vuex实现Vue后台管理中的角色鉴权”文章能帮助大家解决问题。

    功能分析

    在常见管理系统中,超级管理员会给每个用户分配角色,利于管理员角色、编辑人员角色、行政人员角色,不同角色在登录时,我们侧边导航不一样,可以访问的路由也是不一样的。

    实现思路

    常见的角色鉴权思路有两种:

    1 静态的

    通俗点将就是前端将 所有的导航数据以及所有的路由定死在前端,每个导航和路由新增roles属性代表当前路由或当前导航可以访问的角色有哪些,登录时接口返回用户角色 role,进行判断和过滤,实现鉴权

    2 动态的

    前端定定义基础路由,用户的导航数据和 路由数据 存储在数据库中,用户登录时,请求接口获取当前用户可以访问的路由和菜单,前端拿到数据 动态渲染导航,通过 vue路由 addRoute方法动态添加到路由中

    代码实现

    vuex中定义user模块,存储用户信息以及用户侧边导航数据

    // 引入封装好的 登录的model 函数import doLogin from '@/api'export default {    namespaced: true,    state: {         // 用户信息利用缓存备份防止刷新 取值时判断缓存获取         // 用户的基础信息 如nickName昵称和avatar用户头像        userInfo: localStorate.getItem('userInfo')           ?            JSON.parse(localStorate.getItem('userInfo'))           :            {}        ,        // 登录返回的token 秘钥        token: localStorage.getItem('token') || '',         // 当前用户的角色        role: localStorage.getItem('role') || '',         // 所有的导航 以下是示例        menus: [          // 每个导航 新增roles属性 代表可以访问当前用户的所有的角色          {            label: '仪表盘',            path: '/dashBoard',            roles: ['admin', 'a', 'b', 'superAdmin'],            icon: 'el-icon-s-data'          },          {            label: '商品管理',            path: 'el-icon-s-Goods',            icon: 'el-icon-s-data',            roles: ['admin', 'a', 'b', 'superAdmin']          },          {            label: '个人中心',            path: '/user',            roles: ['admin', 'a', 'b', 'superAdmin'],            icon: 'el-icon-user-solid'          },          {            label: '设置',            path: '/setting',            roles: ['a', 'b', 'superAdmin'],            icon: 'el-icon-s-tools'          }        ]    },    getters: {        authMenus (state) {            // 定义getters 过滤当前用户的role不能访问的导航            // 这就是当前用户role可以访问的导航            return state.menus.filter(menu=> menu.roles.includes(state.role))        }    },    mutations: {        INIT_LOGIN (state, {userInfo, token, role}) {           // 登录成功 存储 用户信息            state.userInfo = userInfo            state.token = token            state.role = role            // 缓存起来防止刷新 vuex状态丢失            localStorage.setItem('userInfo', jsON.stringify(userInfo))            localStorage.setItem('token', token)            localStorage.setItem('role', role)        }    },    actions: {        DO_LOGIN ({commit}, params) {            // action中发送请求进行登录            doLogin(params).then(res => {                if(res.data.code === 200) {                    // 请求成功触发mutation存储用户信息 包括role                    commit('INIT_LOGIN', {                        userInfo: res.data.data.userInfo,                        token: res.data.data.token,                        role: res.data.data.role                    })                }            })        }    }}

    router中路由meta中新增roles 定义当前路由可以访问的所有的角色

    const routes = [  {      path: '/',      component: Admin,      meta: {        roles: '*' // * 所有角色都可以访问      },      children: [        {          path: '/',          redirect: '/dashBoard',          meta: {            roles: ['admin', 'a', 'b', 'superAdmin']          }        },        {          path: '/dashBoard',          name: '仪表盘',          component: () => import('_views/DashBoard'),          meta: {            roles: ['admin', 'a', 'b', 'superAdmin']          }        },        {          path: '/itemLists',          name: '商品管理',          component: () => import('_views/Items'),          meta: {            roles: ['admin', 'a', 'b', 'superAdmin']          }        },        {          path: '/itemAdd',          name: '增加商品',          component: () => import('_views/Items/components/ItemAdd'),          meta: {            roles: ['admin', 'a', 'b', 'superAdmin']          }        },        {          path: '/itemUpdate',          name: '修改商品',          component: () => import('_views/Items/components/ItemUpdate'),          meta: {            roles: ['admin', 'a', 'b', 'superAdmin']          }        },        {          path: '/cateLists',          name: '分类管理',          component: () => import('_views/Cate'),          meta: {            roles: ['admin', 'a', 'b', 'superAdmin']          }        },        {          path: '/user',          name: '个人中心',          component: () => import('_views/SetUser'),          meta: {            roles: ['admin', 'a', 'b', 'superAdmin']          }        },        {          path: '/setting',          name: '设置',          component: () => import('_views/Setting'),          meta: {            roles: ['a', 'b', 'superAdmin']          }        }      ]    },    {      path: '/login',      component: () => import('_views/Login'),      meta: {        roles: '*'      }    },    {      path: '*',      component: () =>        import('_views/NotFound'),      meta: {        roles: '*'      }    },    {      path: '/noAuth',      component: () =>        import('_views/Nopermission'),      meta: {        roles: '*'      }    }]

    router新增路由前置首位 做权限拦截

    router.beforeEach((to, from, next) => {   //登录鉴权   if (to.path !== '/login') {    if (isLogin()) {            if (to.meta.roles === '*') {        // 所有用户都可以访问 直接放行        next()      } else {        // 判断 roles中是否包含 用户的role        const role = localStorage.getItem('role') || ''        if (to.meta.roles.includes(role)) {          next()        } else {          // 去没有权限这个页面 这是没有权限路由需要自己创建一个          next('/noAuth')        }      }    } else {      next('/login')    }  } else {    next()  }}

    侧边导航页面 使用 getters中的 authMenus 循环侧边导航

        <el-menu  @select="choseMenu">          <div v-for="nav in $store.getters['user/authMenus ']" :key="nav.label">            <el-menu-item :index="nav.label" @click="switchNav(nav.path, nav.label)" v-if="!nav.children">              <i :class="nav.icon"></i>              <span slot="title">{{nav.label}}</span>            </el-menu-item>            <el-submenu :index="nav.label" v-if="nav.children">              <template slot="title">                <i :class="nav.icon"></i>                <span>{{nav.label}}</span>              </template>                <el-menu-item                  v-for="subNav in nav.children"                  :key="subNav.path"                  :index="subNav.label"                  @click="switchNav(subNav.path, subNav.label)">{{subNav.label}}</el-menu-item>            </el-submenu>          </div>    </el-menu>

    最后一步 登录页登录时调用 请求登录的action即可大功告成

    this.$store.dispatch('user/DO_LOGIN',{    userName: 'xxx',    pwd: 'xxxx'})

    关于“怎么使用Vuex实现Vue后台管理中的角色鉴权”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

    --结束END--

    本文标题: 怎么使用Vuex实现Vue后台管理中的角色鉴权

    本文链接: https://www.lsjlt.com/news/330319.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 怎么使用Vuex实现Vue后台管理中的角色鉴权
      这篇文章主要介绍“怎么使用Vuex实现Vue后台管理中的角色鉴权”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Vuex实现Vue后台管理中的角色鉴权”文章能帮助大家解决问题。功能分析在常见管...
      99+
      2023-06-30
    • 详解如何使用Vuex实现Vue后台管理中的角色鉴权
      目录前言功能分析实现思路代码实现vuex中定义user模块,存储用户信息以及用户侧边导航数据router中路由meta中新增roles 定义当前路由可以访问的所有的角色ro...
      99+
      2024-04-02
    • PostgreSQL权限和角色怎么管理使用
      在PostgreSQL中,权限和角色是用来控制数据库访问和操作的重要机制。权限用于控制用户或角色对数据库对象(如表、视图、函数等)的...
      99+
      2024-04-09
      PostgreSQL
    • Vue后台管理系统怎么实现分页功能
      这篇文章主要介绍“Vue后台管理系统怎么实现分页功能”,在日常操作中,相信很多人在Vue后台管理系统怎么实现分页功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue后台管理系统怎么实现分页功能”的疑惑有所...
      99+
      2023-06-21
    • MySQL中怎么实现用户账户管理和权限管理
      MySQL中怎么实现用户账户管理和权限管理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。mysql 的权限体系大致分为5个层级:全局层级全局权...
      99+
      2024-04-02
    • Struts2中怎么利用interceptor实现权限管理
      Struts2中怎么利用interceptor实现权限管理,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Xml代码<interceptors>  ...
      99+
      2023-06-17
    • 怎么使用Vuex模块化实现待办事项的状态管理
      这篇文章主要介绍“怎么使用Vuex模块化实现待办事项的状态管理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Vuex模块化实现待办事项的状态管理”文章能帮助大家解决问题。效果:待办事项中的一...
      99+
      2023-07-04
    • Vue3管理后台项目使用高德地图选点的实现
      目录前言获取地图Key引入地图 JSAPI初始化地图地图选点组件化使用拓展前言 最近在做的管理后台项目中有一个业务场景是添加门店的地址和经纬度,地址可以输入,但经纬度这样处理却不合适...
      99+
      2024-04-02
    • 权限管理模块中动态加载Vue组件怎么实现
      本篇内容介绍了“权限管理模块中动态加载Vue组件怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!登录状态保存当用户登录成功之后,需要将...
      99+
      2023-06-19
    • MySQL中的用户创建与权限管理怎么实现
      这篇文章主要讲解了“MySQL中的用户创建与权限管理怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的用户创建与权限管理怎么实现”吧! ...
      99+
      2024-04-02
    • vue中使用pinia全局状态管理的实现
      目录与vuex的区别安装引入pinia创建状态目录pinia模块组成创建pinia模块在组件中使用该状态机pinia模块实例中的api讲解状态持久化与vuex的区别 去除了 muta...
      99+
      2024-04-02
    • SpringBoot和Vue.js怎么实现前后端分离的用户权限管理系统
      这篇文章主要介绍“SpringBoot和Vue.js怎么实现前后端分离的用户权限管理系统”,在日常操作中,相信很多人在SpringBoot和Vue.js怎么实现前后端分离的用户权限管理系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的...
      99+
      2023-07-05
    • 使用node+express+mysql实现一个简单的后台管理(增删改查)
      目录  一、新建目录,如:test-demo,使用命令行初始化  二、安装相关依赖  三、自行安装mysql后,安装Navicat 16 for MySQL图形界面工具, 创建数据库,导入student_database.sql文件  四、...
      99+
      2023-10-07
      node.js express mysql vue elementui
    • MongoDB的权限管理与用户认证怎么实现
      MongoDB的权限管理和用户认证是通过创建用户和设置角色来实现的。下面是MongoDB权限管理和用户认证的步骤: 创建管理员用...
      99+
      2024-05-07
      MongoDB
    • 使用vue怎么实现身份认证管理和租户管理功能
      本篇文章为大家展示了使用vue怎么实现身份认证管理和租户管理功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。按钮级权限src\utils\abp.js:export function&n...
      99+
      2023-06-15
    • 使用java怎么在控制台中实现一个学生信息管理系统
      使用java怎么在控制台中实现一个学生信息管理系统?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java有哪些集合类Java中的集合主要分为四类:1、List列表:有序的,可重...
      99+
      2023-06-14
    • SpringBoot2 中怎么使用 QuartJob 实现定时器实时管理
      本篇文章给大家分享的是有关SpringBoot2 中怎么使用 QuartJob 实现定时器实时管理,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、QuartJob简介1、一句...
      99+
      2023-06-02
    • 怎么在Spring 5.0中使用log4j2实现日志管理
      本篇文章为大家展示了怎么在Spring 5.0中使用log4j2实现日志管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。先引入log4j 2的三个jar包log4j-api-2.10.0.jarl...
      99+
      2023-05-30
      spring log4j
    • Linux中使用全局框架怎么实现内存管理
      Linux中使用全局框架怎么实现内存管理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.  地址划分。1. CPU地址。CPU地址是指CPU的地址总...
      99+
      2023-06-16
    • C++中怎么使用Map实现学生信息管理系统
      本文小编为大家详细介绍“C++中怎么使用Map实现学生信息管理系统”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中怎么使用Map实现学生信息管理系统”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、 作品...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作