vue前后端分离后台管理系统(权限管理,登录),对接后端SpringSecurity,实现权限管理功能

后台管理系统的权限(vue如何实现后台管理系统的权限,react如何实现后台管理系统的权限) CRUD的权限思路:根据后端返回的权限数据(如,这种用CRUD字母标识:"0-1-0-R", "0-1-0-U", "0-1-0-D"),通过路由传参,在组件里,显示或者隐藏对应的按钮即可。不同的系统,有不同的角色(其实就是甲方公司的职位),如:HIS(医院信息管理系统)的角色有:院长,主任,医生,护士,药剂师等等,这些人属于不同的岗位,那么,也就具备不同的功能。不同的用户进入同一个页面,对数据的操作权限不一样,即:有的用户进去后,只能查询数据,有的用户可以对数据进行添加,修改,删除。这个权限会发给后端。 阅读详情
AI摘要

本文详细介绍了基于Vue的后台管理系统中权限管理的实现,包括登录功能、用户管理、角色管理和菜单管理的增删改查,以及权限控制功能。通过路由配置、API接口设计、数据回显和树形结构数据处理,实现了动态路由和按钮权限控制。同时,讨论了解决刷新页面后vuex数据丢失的问题。

管理系统后端(java)请参考:https://blog.youkuaiyun.com/grd_java/article/details/121925792
本项目源码,码云:https://gitee.com/yin_zhipeng/vue-backstage-scaffolding.git

一、重要知识点总结以及登录功能实现

由于篇幅原因,我将其放在这个文章中:https://blog.youkuaiyun.com/grd_java/article/details/122770777

二、权限管理菜单的增删改查实现

我们先实现整个的增删改查功能,最后再实现权限功能,很简单,直接看上面码云源码就好,下面是效果演示
  1. 用户管理
    在这里插入图片描述
    在这里插入图片描述
  2. 角色管理
    在这里插入图片描述
    在这里插入图片描述
  3. 菜单管理
    在这里插入图片描述

1. 路由配置

配置效果如下

在这里插入图片描述

先把相关组件创建完成,创建出来就好,把首页的index.vue文件复制3份即可

在这里插入图片描述

配置路由

在这里插入图片描述

// 2.所有路由都封装到这个常量中
export const constantRoutes = [
  {
    path: '/login',
    component: () => import('@/views/login/index'),
    hidden: true
  },

  {
    path: '/404',
    component: () => import('@/views/404'),
    hidden: true
  },

  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [{//这里的内容会在<router-view :key="key" />标签渲染
      path: 'dashboard',
      name: 'Dashboard',
      component: () => import('@/views/dashboard/index'),
      meta: { title: '首页', icon: 'dashboard' }
    }]
  },

  {
    path: '/security',
    component: Layout,
    redirect: '/security/user',
    meta: { title: '权限管理', icon: 'el-icon-lock' },
    children: [
      {
        path: 'user',
        name: 'User',
        component: () => import('@/views/security/user/index'),
        meta: { title: '用户管理'}
      },
      {
        path: 'role',
        name: 'Role',
        component: () => import('@/views/security/role/index'),
        meta: { title: '角色管理'}
      },
      {
        path: 'menu',
        name: 'menu',
        component: () => import('@/views/security/menu/index'),
        meta: { title: '菜单管理'}
      },
    ]
  },

  // 404 page must be placed at the end !!!
  { path: '*', redirect: '/404', hidden: true }
]

2. 用户管理功能

2.1 后端接口API介绍

  1. 根据所传json,查询符合条件的用户,json为空,显示所有,post请求.另外,还提供了一个处理分页的接口,也可以查询符合条件的用户
    在这里插入图片描述
    在这里插入图片描述
  2. put请求,表示根据json修改用户,但是不会修改密码
    在这里插入图片描述
  3. put请求,根据用户id和密码,修改用户密码
    在这里插入图片描述
  4. delete请求,根据id删除用户
    在这里插入图片描述
  5. put请求,更新用户所有角色,uid为用户id,rids是一个数组,表示角色,这里选择的角色将成为指定用户的角色
    在这里插入图片描述
  6. post请求,添加用户
    在这里插入图片描述

2.2 前端api接口

在这里插入图片描述

2.3 页面和逻辑编写

在这里插入图片描述

3. 角色管理功能

后端接口如下

在这里插入图片描述

前端相关文件

在这里插入图片描述
在这里插入图片描述

3.1 数据回显

如果当前用户拥有自己的菜单,我们点击修改菜单按钮后,需要将当前角色已有菜单,做数据回显,思路如下图
难点:回显后,用户操作数据,需要和回显数据结合。当用户没有点击确定修改按钮做什么处理
  1. 拿到当前用户id,先清除回显数据,然后请求数据,完成数据回显。这样用户没有点击修改按钮,下次进入,依然是实时数据
    在这里插入图片描述
    在这里插入图片描述
  2. 点击修改按钮
    在这里插入图片描述

4. 菜单管理功能

除了处理树形数据有点难度外,其它大家自己去看源码就好

4.1 树形结构数据处理算法

在这里插入图片描述
在这里插入图片描述

将扁平数据换成树形结构
/**
 * 构造树型结构数据
 * @param {*} source 数据源
 * @param {*} id id字段 默认 'id'
 * @param {*} parentId 父节点字段 默认 'parentId'
 * @param {*} children 孩子节点字段 默认 'children'
 * @param {*} rootId 根Id 默认 0
 */
export function treeData (source, id, pid, children, rootId) {
  id = id || 'id'
  pid = pid || 'pid'
  children = children || 'children'
  rootId = rootId || 0
  const cloneData = JSON.parse(JSON.stringify(source))// 对源数据深度克隆
 return cloneData.filter(father => {
    const branchArr = cloneData.filter(child => father[id] == child[pid])// 返回每一项的子级数组
    branchArr.length > 0 ? father[children] = branchArr : delete father[children]// 如果存在子级,则给父级添加一个children属性,并赋值
    return father[pid] == rootId // 返回第一层
  })
}
树形结构数据转换为扁平数据
/**
 * 树形结构解析,构造为普通形式
 */
export function unTreeData(source,children){
  children = children || 'children'
  let cloneData = JSON.parse(JSON.stringify(source))// 对源数据深度克隆
  let arr = []//保存最终结果
  unTreeDatadd(cloneData,children,arr)//递归解析树结构,解析结果放在arr中
  return arr;//将arr返回
}
function unTreeDatadd(source,children,arr){
  //遍历数组
  source.filter(father=>{
    if(father[children]){//如果当前元素有child,将当前元素加入arr,然后递归它的儿子加入arr,儿子都递归完,删除当前元素的children属性
      arr.push(father)//将当前元素加入arr
      unTreeDatadd(father[children],children,arr)//递归儿子
      delete father[children]//删除children
    }else{//如果当前元素没有child
      arr.push(father)//直接添加到arr
    }
  })
}

三、权限控制功能实现

效果展示:
  1. admin用户登录
    在这里插入图片描述
  2. 作者用户登录
    在这里插入图片描述
后端的针对url的已经完成了权限控制,所以我们前端不做任何实现,一个用户也没有办法操作它没有权限的内容(直接报权限不足异常)。但是这样用户体验不好,所以我们最好让一个用户没有权限操作的东西,直接不显示,思路如下:
  1. 当用户登录成功后,根据用户id查询它拥有的角色,和菜单权限,保存到vuex中
  2. 将路由拆分(把原来完整的进行拆分)
  1. 常量路由:无论何种用户,都可以操作的路由,比如登录,首页。
  2. 异步路由:根据不同用户,展示不同的路由。注意,路由不是从服务器获取到的,服务器返回的只是一个标识,我们需要进行比对,隐藏不需要的路由
  3. 任意路由:404等路由,用户操作错了,从定向的路由
  1. 获取异步路由,我们需要通过异步路由,进行比较过滤,判断哪些路由不需要显示
如何判断呢
  1. 对于路由,我们主要通过查询数据库配置的菜单,取出path属性,与前端的路由进行比较,过滤前端的路由,path相同的路由,会显示,path不同的路由会被过滤
    在这里插入图片描述
    在这里插入图片描述

1. 拆分路由

1. 常量路由

在这里插入图片描述

2. 异步和任意路由

在这里插入图片描述

2. 将用户角色和菜单权限保存到vuex,然后过滤路由

1. 引入我们需要的东西和state

在这里插入图片描述

2. mutations方法,合并路由,挂载到router

在这里插入图片描述

3. 获取用户信息成功后,获取用户菜单,将角色和菜单封装到vuex

在这里插入图片描述

4. 过滤异步路由

在这里插入图片描述

//比较路由,返回需要展示的异步路由
const compareasyncRoutes = (asyncRoutes,routes)=>{
  return asyncRoutes.filter(item =>{
    if(routes.indexOf(item.path)!=-1){//如果当前路由,用户拥有权限,就展示
      if(item.children&&item.children.length){//如果有children就递归
        item.children = compareasyncRoutes(item.children,routes)
      }
      return true;
    }
  })
}

3. 使用模板需要做的额外更改

完成上面的内容后,已经完成了路由的权限控制,但是我们使用的模板,只使用了常量路由,所以我们需要修改
  1. 如下可看到,模板中使用的是常量路由
    在这里插入图片描述
修改代码,让它使用vuex中的路由

在这里插入图片描述

此时并没有完事,进入路由后,刷新页面会丢失数据

在这里插入图片描述

4. 解决刷新页面vuex中数据丢失,路由丢失问题

很简单,通过路由导航,切换路由时判断vuex中数据是否存在,如果不存在,说明刷新了页面,需要重新生成路由

在这里插入图片描述

/**动态路由需要解决,刷新路由丢失问题**/
    //判断是否为刷新页面,vuex中无数据,则为刷新页面
    if(store.state.user.routesResult.length === 0 ){
      // 获取用户信息(关于异步路由的东西我放这里了)
      store.dispatch('user/getInfo').then(()=>{
        next({path:to.path})
      })
    }else{
      next()
    }

四、按钮权限控制

如果用户可以浏览某页面,但是没有某按钮权限,那么将无法看到此按钮,效果如下:
  1. 需要设定浏览权限(因为我们使用element ui组件,它没法直接选父菜单,)
    在这里插入图片描述
  2. 超级管理员的权限
    在这里插入图片描述
  3. 普通用户的权限
    在这里插入图片描述
  4. 超级管理员看到的页面
    在这里插入图片描述
  5. 普通用户看到的页面
    在这里插入图片描述

1. 修改element ui 源码解决问题

我们上面通过人为多添加一个显示权限,解决了父菜单无法直接选中的问题

在这里插入图片描述
在这里插入图片描述

另外还可以修改element ui 源码,修改方法看下面注释,我这里选用上面的方法

在这里插入图片描述

2. 实现按钮权限

分析
  1. 通过菜单权限来判断
    在这里插入图片描述
  2. 只需要判断就可以了
vuex 封装

在这里插入图片描述

相应按钮添加判断

在这里插入图片描述

<el-button type="primary" slot="reference" v-show="$store.state.user.buttons.indexOf('btn:security')!=-1">添加</el-button>
效果
  1. 超级管理员看到的页面
    在这里插入图片描述
  2. 普通用户看到的页面
    在这里插入图片描述
SpringBoot+Spring Security+Vue实现通用的权限管理系统 Spingboot+vue实现通用的权限管理系统 阅读详情

相关推荐

VUE+Spring Boot前后端分离开发实战(六):基于RABC权限通用后台管理系统-给角色动态分配权限和用户

本文记录了通用后台管理系统中RABC权限中两个功能:给角色分配权限、给角色设置用户。 查询当前所有的用户 查询当前巨额色色已分配的用户 前端实现 1.api.js配置接口 2.角色页面RoleList.vue改造后的完整代码

xuemeng2016的专栏 1390

基于 vue-element-admin 升级的 Vue 3 + TypeScript + Element-Plus 版本后台管理系统正式开源

项目基于vue-elemnent-admin升级的Vue3版本,代码结构基本和vue-element-admin一致,代码风格参考Vue.js社区,CSS遵守BEM规范 ,站在巨人的肩膀不仅是为了看的更远,更多的是一种致敬、延续和希望走的更远。

有来技术 5万+

5G 网络的移动性管理上下文对比介绍

5G 网络的移动性管理上下文对比介绍 4G/5G MM移动性管理机制对比 5G引入了新移动性管理状态,通过mobility pattern(移动方式)实现按需的移动性管理等。 MM的相关状态分为一下几种: RM状态(用户注册管理 注册态/非注册态)和CM状态(用户连接态/空闲态)独立;RM状态标识UE是否注册到网络,CM状态标识UE和核心网的信令连接是否存在。 RAN侧引入RRC-inactive state:UE(用户端)对于CN(核心网)而言处于连接态,对RAN(接入网)而言处于Ld..

m0_59032675的博客 4820

SpringSecurity+VUE实现简单的权限管理

SpringSecurity权限管理基础框架实现完成了,可以聚焦业务实现了。

xlsj雪松的博客 1246

FPGA设计中的扇出约束实战:从XDC到代码优化的全流程解析

本文全面解析FPGA设计中扇出约束的重要性与应用,详细介绍了从XDC约束文件设置到HDL代码优化的全流程实战技巧。通过MAX_FANOUT约束控制信号负载,结合寄存器复制和物理优化策略,有效解决高扇出导致的时序违例和布线拥塞问题,提升设计性能和可靠性。

nept的博客 797

(超详细)Qt入门和配置Visual Studio的Qt环境

内容写了Qt入门,创建并编写第一个Qt程序,以及配置VS编写Qt程序的环境。(超级详细)

LY549826LY549264的博客 7678

vue前后端分离后台管理系统(权限管理,登录),前端脚手架。对接后端基于SpringSecurity提供的后台接口

管理系统后端请参考:https://blog.csdn.net/grd_java/article/details/121925792 从头到尾,一步一步讲解如何前端对接后端接口,实现单点登录,权限管理等功能

殷志鹏的博客 5336

安卓设备通过USB串口与STM32单片机通讯之一

这里写自定义目录标题欢迎使用Markdown编辑器`在这里插入代码片`新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器在这里插入代码片 你好下Markdown的基本语法知识。 新的改变 我们对

JGB联合商务组的博客 7245

开发SpringBoot+Jwt+Vue的前后端分离后台管理系统VueAdmin - 前端笔记

1. 前言 而接下来,我们即将开发一个前后端分离的后台管理系统VueAdmin。权限框架采用spring security,然后相对来说权限模块开发就多点代码,也仅此而已了。对了前端的系统界面也是我们一步步开发的,参考学习B站的MarkHub跟着他的进度来进行的,具体详细的过程可以参考他的B站链接。 2. 安装vue环境,并新建Vue项目 前端我们依然选择的是Vue+ElementUI的组合,主要还是因为这个主流呀。针对Vue,如果还不熟悉的同学,建议去看看这个...

追光少年的博客 2420

深信服技术认证“SCCA-C”划重点:信服云托管云

该认证包括云数据中心基础、云计算基础、云计算关键技术、云计算交付和运维体系、云计算技术商业应用、信服云托管云、深信服超融合HCI、深信服桌面云aDesk、深信服分布式存储EDS、深信服应用交付AD。学习并获得SCCA-C认证后,可以具备深信服产品功能原理与实践,能够根据业务需求,协助完成云产品方案落地与实施;能够根据业务需求,完成深信服云产品的部署和管理的基本工作。为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。

sangfor_edu的博客 613

在armv8架构中,有哪些是serror

(3)、RAS(Reliability, Availability, and Serviceability)错误:一些对于系统的可靠性、可用性和可维护性有影响的错误可能会触发 SError。(2)、ECC(Error Correction Code)错误:在访问带有错误校验的内存(如ECC内存)时,如果发现错误校验失败,可能会产生SError。2、其实呢,大多数Serror都是实现定义的,真正实现的serror就没有多少个。Serror(也称System Error),是异步异常的一种,一般是来自。

baron-周贺贺-代码改变世界ctw 1013

SpringBoot2.x炫酷吊炸天前后端分离的后台管理系统

点击▲关注 “爪哇笔记” 给公众号标星置顶更多精彩 第一时间直达项目简介一个基于Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Se...

不是太高的手的专栏 4455

YOLO + SubspaceAD:一张良品图,检出所有未知缺陷

当YOLO遇上子空间建模,工业质检正迎来从“见多识广”到“举一反三”的质变时刻。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 496

SpringBoot+Jwt+Vue的前后端分离后台管理系统

项目:SpringBoot+Jwt+Vue的前后端分离后台管理系统 项目来源:手把手教你开发SpringBoot+Jwt+Vue的前后端分离后台管理系统 总结: 用了总共不到一周的时间,跟着饰品 原因分析: 提示:这里填写问题的分析: 例如:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理

qq_42265220的博客 1849

Trae辅助开发完全教程:从入门到企业级实战

《Trae AI IDE完全教程》系统介绍了这款AI驱动的下一代集成开发环境。教程从基础入门到实战应用,详细讲解了Trae的双重开发模式(IDE/SOLO)、智能编程助手CUE、行内对话、模型管理等核心功能。内容包括环境配置、项目创建、Python开发示例,以及RPC框架和iOS应用两个实战案例。Trae通过深度整合AI技术,显著提升编码效率,支持多种编程语言和主流模型,适合从新手到企业级开发者的不同需求。本教程帮助开发者快速掌握Trae的使用技巧,实现AI辅助下的高效编程。

MrLi的博客 764

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

168张图,万字长文,手把手教你开发vue后台管理系统

.markdown-body { color: rgba(56, 56, 56, 1); font-size: 15px; line-height: 30px; letter-spacing: 2px; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Open...

程序员小明1024 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot3+Vue3主流前后端分离系统

基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、ElementPlus、MySQL等技术栈实现的单体前后端分离后台管理系统;

xiaomayios的博客 876

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring Boot + Vue前后端分离(八)权限设计

你好,欢迎来到 【程序职场】 ,这里有你需要的技术提升,职场规划,个人成长,副业发展 等文章。 和更多小伙伴 一起学习,一起进步。 上篇我们通过vue实现了后端系统的导航栏,Spring Boot + Vue前后端分离(七)后端系统,功能导航页,通过导航栏可以看到后期我们要做的功能,后面我们会按照这些功能一步一步的完善该系统,到这里我们界面性的操作算是结束了,后面我们开始后台权限和业务逻辑...

1631

Java Spring boot element ui activiti前后端分离,流程审批,权限管理框架

是什么? 使用springboot,activiti,mybatis,vue elementui开发的后台管理系统(包含权限管理、工作流等功能),真正前后端分离的微服务架构,经过很多项目实战、淬炼、软件开发公司主流技术的集大成者。 有什么用? 在此基础上可二次开发(OA、ERP、CRM、金融、网站后台)等管理系统 可以做APP、微信企业号、公众号的后台,json标准接口 系统功能完善(用户...

爱技术、爱生活 4万+

springsecurity前后端分离登录认证_SpringBoot+Jpa+SpringSecurity+Redis+Vue的前后端分离开源系统...

最近鹏哥在总结目前市面流行的开源项目,努力发现有价值的项目分享给大家。项目简介:eladmin基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持前端菜单动态路由。在 github 和 gitee 上看了很多热门...

weixin_39601657的博客 206

第四节 springsecurity结合jwt实现前后端分离开发

前后端分离现在是主流开发形式,jwt也是用的比较多一种令牌方式,接下来我们来整合下jwt。方便后续和vue进行前后端联动开发。Security整合jwt有很多种方法,核心还是要理解filterChain目前的返回格式比较不符规范,下一节把输出格式化下。...

F_angT的博客 915
上一篇: vue前后端分离后台管理系统(权限管理,登录),前端脚手架。对接后端基于SpringSecurity提供的后台接口
下一篇: java数据结构YZP专栏-----队列
ydenergy_殷志鹏
博客等级 码龄7年 5885粉丝 543原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值