【重磅开源】MapleBoot权限控制使用介绍(菜单权限、按钮权限、数据权限)

基于SpringBoot+Vue3开发的轻量级快速开发脚手架

jdk-8 vue license

## 🍁项目简介

一个通用的前、后端项目模板

一个快速开发管理系统的项目

一个可以生成SpringBoot+Vue代码的项目

一个持续迭代的开源项目

一个程序员的心血合集

度过严寒,终有春日;挺过酷暑,必有丰收。

GitHub地址

Gitee地址

文档地址(更新中)

演示地址(储备中)

🌸实现思路

先说说菜单权限,其实很简单,市面上通用的实现,通过角色配置对应菜单,然后用户选择对应的角色,然后后端接口汇总出用户拥有的菜单,前端进行菜单路由渲染即可。

再说说按钮权限,同菜单权限,通过角色配置对应按钮权限,然后用户选择对应的角色,然后后端接口汇总出用户拥有的按钮权限,进入页面时,前端通过判断是否拥有权限,对按钮权限是否展示进行控制。

最后说说数据权限,数据权限控制要看具体的需求,这里实现的是,以部门作为数据权限的划分,使用角色来控制对用的权限,权限分为5档,分别是:全部数据权限、自定数据权限、本部门数据权限、本部门及以下数据权限、本人创建的数据权限。如果拥有多个角色,之间用or来连接。通过切面将需要数据权限控制接口,拼入权限控制条件的参数。然后传入sql中过滤查询。

具体的实现和使用过程在下文详细描述。

🌲菜单权限

详细的介绍一下菜单权限是怎么使用的吧,代码就不过多赘述了,详细可以看代码

简述步骤:

  1. 首先在【菜单管理】里面可以维护菜单按钮信息。
  2. 维护好之后,在【角色管理】里面选择角色对应的菜单权限。
  3. 维护好之后,在【用户管理】里面选择对应的角色即可
  1. 首先在【菜单管理】里面可以维护菜单按钮信息。如果是目录就选择目录,如果是菜单页面就选择菜单。

image-20240520104923352

  1. 维护好之后,在【角色管理】里面选择角色对应的菜单权限。

image-20240520104254428

  1. 维护好之后,在【用户管理】里面选择对应的角色即可,一个用户可以对应多个角色,这些角色会有重复的菜单,展示的时候会根据菜单id进行去重处理。

image-20240520104616594

🍀按钮权限

按钮权限配置同菜单权限,这里就不过多描述,菜单类型选择按钮即可,权限标志要确保唯一。其中权限标志建议模块:功能:按钮这样的格式配置,eg:system:user:update。方便使用,更好的防止不同按钮权限标志重置。

简述步骤:

  1. 配置按钮权限、角色、用户
  2. 引用authFunction工具类
  3. 使用v-if="auth(权限标志)"判断

配置好之后,需要在vue代码中对应的按钮展示地方进行控制,这里以用户管理为例,代码可以参考/views/system/user/index.vue

在登录的时候,会获取到用户拥有的按钮权限,然后引用import { auth } from '/@/utils/authFunction';封装的按钮权限判断方法,在按钮控制处添加v-if="auth('system:user:update')"判断即可。

🥦数据权限

简单介绍

这里简单说说,数据权限控制有时候千奇百怪,很多时候需要特殊处理,这里只是通用的场景,并不能覆盖所有的场景,使用时需要注意,判断是否符合自己的需求。

数据权限分为5档,需要在角色上配置。

如果一个人配置了多个角色,数据以or的形式关联。数据查询最大范围的数据。

例如:

【场景一】配置了拥有全部数据权限,别的条件都无视了

【场景二】配置了自定义数据权限本人创建的数据权限,则可以同时看到自定义部门数据和本人创建的数据

【场景三】配置了本部门及以下数据权限本部门数据权限本人创建的数据权限,则可以同时看到本部门及以下数据和本人创建的数据

全部数据权限:不加任何限制,查全部数据

自定义数据权限:查询关联部门的数据

本部门数据权限:部门ID为自己所属部门的数据

本部门及以下数据权限:部门ID为自己所属部门的数据和这个部门下数据

本人创建的数据权限:只查看

image-20240520110202095

数据库配置

当然,使用时要添加我们的权限注入

首先要确定需要添加数据权限过滤的表中要有归属部门ID和数据创建人ID

这里以sys_config为例,使用belong_dept_idcreate_id来控制权限

注意:这里默认用户数据为一套,如果是管理端和用户端多套用户,且用户ID都是自动递增的情况,需要做字段区分或来源区分。

CREATE TABLE `sys_config` (`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '参数主键',`config_name` VARCHAR(100) NULL DEFAULT '' COMMENT '参数名称',`config_key` VARCHAR(100) NULL DEFAULT '' COMMENT '参数键名',`config_value` VARCHAR(500) NULL DEFAULT '' COMMENT '参数键值',`config_type` TINYINT(1) NULL DEFAULT '0' COMMENT '是否内置',`belong_dept_id` BIGINT(20) NULL DEFAULT NULL COMMENT '归属部门id',`create_id` BIGINT(20) NULL DEFAULT NULL COMMENT '创建人id',`create_time` DATETIME NULL DEFAULT NULL COMMENT '创建时间',`update_id` BIGINT(20) NULL DEFAULT NULL COMMENT '修改人id',`update_time` DATETIME NULL DEFAULT NULL COMMENT '更新时间',`remark` VARCHAR(500) NULL DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`) USING BTREE
)COMMENT='系统管理-参数配置表' COLLATE='utf8_general_ci' ENGINE=InnoDB;

项目中使用

在需要做数据权限区分的controller上使用@DataScope注解。

DataScope的两个参数介绍

deptAlias默认belong_dept_id,查询数据所在表的部门ID,如为多表关联,请指定表的别名,如:d.dept_id

userAlias默认create_id,查询数据所在表的用户ID,如为多表关联,请指定表的别名,如:u.create_id

请求参数要继承BaseQuery类,切面会判断是否属于BaseQuery类,并把数据权限参数解析放在dataScope参数上。

dataScope参数传入Mapper中,在sql条件里面添加${dataScope}

【注意】不要自己使用dataScope参数,切面会先清空dataScope参数,防止sql注入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/342956.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯物联网竞赛_STM32L071_19_输出方波信号(PWM)

国赛考了一个方波,第一次考这个,连个示波器都没有 CUBMX配置: 按上述配置刚好是32MHZ / 32 / 100 10KHZ 理论: 频率:就是一秒钟能产生多少个脉冲,如下图: 这算是一个脉冲,1KHZ说明一秒钟产生…

Facechain系列: constants.py文件解读

在根目录下还有个facechain目录,其中的constants.py文件中定义了代码控制的重要参数。 1.姿态控制 在应用代码进行推理(见这里Facechain系列: 通过代码进行推理)中,如果将以下代码 use_pose_model False 修改为 use_pose_mo…

hot100_62不同路径

不同路径 题目思路、代码1.排列组合2.动态规划 题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” &#xff0…

ubuntu-server(22.04)安装

准备工作 首先我们先从网上获取ubuntu的iso镜像文件 Index of /ubuntu-releases/22.04/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 我们安装这个最小包即可 找到我们ubuntu安装完成后所需要下载安装源的网址(常用是阿里云) ubuntu安装…

TPM仿真环境搭建

文章目录 背景及注意事项一、CMake二、m4三、GNU MP Library四、TPM_Emulator五、TSS协议栈(trousers-0.3.14.tar.gz)六、 tpm-tools七、查看是否安装成功八、测试 TPM环境(需要开三个终端分别运行)8.1 启动TPM (第一个…

SpringBootWeb 篇-深入了解 AOP 面向切面编程与 AOP 记录操作日志案例

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 AOP 概述 1.1 构造简单 AOP 类 2.0 AOP 核心概念 2.1 AOP 执行流程 3.0 AOP 通知类型 4.0 AOP 通知顺序 4.1 默认按照切面类的类名字母排序 4.2 用 Order(数字) 注…

Java 还能不能继续搞了?

金三银四招聘季已落幕,虽说行情不是很乐观,但真正的强者从不抱怨。 在此期间,我收到众多小伙伴的宝贵反馈,整理出132道面试题,从基础到高级,有八股文,也有对某个知识点的深度解析。包括以下几部…

CC++内存管理【new和delete操作符的详细分析】【常见面试题】

C/C内存管理 1.C/C内存分布 我们先来看一段代码&#xff0c;来了解一下C/C中的数据内存分布。 # include <stdlib.h>int globalVar 1; static int staticGlobalVar 1; // 比globalVar还要先销毁,同一个文件下后定义的先析构 // 全局变量存在 数据段&#xff08;静态…

《尚庭公寓》项目部署之Docker + Nginx

docker rmi nginx docker pull nginx docker rm -f nginx #先创建一个简易的nginx容器&#xff08;后面会删&#xff09;&#xff0c;然后通过 docker cp命令把容器里面的nginx配置反向拷贝到宿主主机上。 docker run --name nginx -p 80:80 -d nginx# 将容器nginx.conf文件复…

【Linux】ip命令详解

Linux网络排查 目录 一、ip命令介绍 1.1 ip命令简介 1.2 ip命令的由来 二、ip命令使用帮助 2.1 ip命令的help帮助信息 2.2 ip命令对象介绍 2.3 ip命令选项介绍 三、查看网络信息 3.1 显示当前网络接口信息 3.2 显示网络设备运行状态 3.3 显示详细设备信息 3.4 查看…

“新夏入汉城,昂首度良辰”—Anzo Capital燃动武汉交易技术峰会

“2024年武汉交易技术峰会”在中国湖北武汉举办。Anzo Capital昂首资本作为2024年交易峰会的独家赞助商出席本次活动&#xff0c;Anzo Capital燃动现场&#xff0c;尽展昂扬奋进之姿。 活动现场&#xff0c; Anzo Capital昂首资本凭借无与伦比的交易环境、专业优质的服务、丰富…

【Python Cookbook】S01E21 文本模式的匹配和查找 match()、search()、findall() 以及 捕获组和 + 的含义

目录 问题解决方案讨论 问题 本文讨论一些按照特定的文本模式进行的查找和匹配。 解决方案 如果想要匹配的只是简单文字&#xff0c;通常我们使用一些内置的基本字符串方法即可&#xff0c;如&#xff1a;str.find()&#xff0c;str.startwith()&#xff0c;str.endswith() …

css 前端面试题学习思维导图学习笔记

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“前端面试题学习笔记”。 一、面试题内容 1.link 和 import的区别 注意&#xff1a;在前端开发中&#xff0c;主要使用的是link,用import的比较少&#xff0c;只有在vue中会用到后者&#xff0c;尤其是加载顺序…

供应链管理怎么做?一文搞懂供应链数字化转型方案

供应链管理不仅关系到产品从原材料到成品&#xff0c;再到最终用户的整个流程&#xff0c;更是企业运营效率、成本控制和市场响应速度的重要体现。然而&#xff0c;在现代商业环境下&#xff0c;传统的供应链管理方式往往存在库存管理困难、协作效率低、结构不灵活等问题&#…

【机器学习】AI大模型的探索—分析ChatGPT及其工作原理

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f4da;介绍ChatGPT 1.1 什么是ChatGPT 1.2 ChatGPT的应用场景 &#x1f4a1;基础概念 1. 人工智能和机器学习 1.1 人工智能&#xff08;AI&#xff09;简介 1.2 机器学习&#xff08;ML&#xff09;简…

【语音告警】Zabbix语音播报-报警媒介部分配置-语音报警灯|声光报警器|网络信号灯

阅读说明 本文为博灵语音通知终端与Zabbix报警媒介的配置&#xff0c;对接完成后可以实现Zabbix的声光语音告警&#xff0c;播报效果可以参考 Modbus-博灵语音通知终端与PLC联动告警介绍 对接前需配置好通知终端的IP地址&#xff0c;设备参数参见 其他完整的Zabbix语音播报报…

AMPL下载安装于基本使用

1 注册安装 先去AMPL官网用邮箱注册 注册后按照提示下载社区版&#xff0c;社区版中&#xff0c;各种求解器都有30天的免费试用权限。下载安装包的时候&#xff0c;如果觉得太慢&#xff0c;可以将下载链接复制到迅雷&#xff0c;迅雷下载起来快很多。 2 新建文件并运行 安…

史上最全,呕心沥血总结oracle推进SCN方法(五)

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。前面介…

【大事件】docker可能无法使用了

今天本想继续学习docker的命令&#xff0c;突然发现官方网站的文档页面打不开了。 难道是被墙了&#xff1f; 我用同事的翻了一下&#xff0c;能进&#xff0c;果然&#xff01; 正好手头的工作告一段落&#xff0c;将代码上传&#xff0c;然后通过jenkins将服务器自动部署到…

基于pytorch的车牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、导入数据 from torchvision.transforms import transforms from torch.utils.data import DataLoader from torchvision import datase…