【重磅开源】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注入。

最近更新

  1. TCP协议是安全的吗?

    2024-06-11 04:40:02       8 阅读
  2. 【Python教程】压缩PDF文件大小

    2024-06-11 04:40:02       9 阅读
  3. 通过文章id递归查询所有评论(xml)

    2024-06-11 04:40:02       10 阅读

热门阅读

  1. Oracle 日志挖掘

    2024-06-11 04:40:02       5 阅读
  2. 13_1 Linux 邮件服务与NTP时间服务

    2024-06-11 04:40:02       5 阅读
  3. C++线程

    2024-06-11 04:40:02       6 阅读
  4. HOT100与剑指Offer

    2024-06-11 04:40:02       8 阅读
  5. 游戏心理学Day10

    2024-06-11 04:40:02       8 阅读
  6. 使用EFCore和Linq查询语句封装复杂的查询结果

    2024-06-11 04:40:02       4 阅读
  7. Python爬虫实现“自动重试”机制的方法(1)

    2024-06-11 04:40:02       7 阅读