mybatis-plus统一处理数据权限

本文档详细介绍了如何实现数据权限的配置,包括创建公共实体类以存储创建者信息,使用Mybatis-Plus统一处理创建时间和创建者字段,以及通过枚举类定义不同级别的数据权限。在查询时,通过统一的SQL模板简化条件代码,并提供数据权限拦截器在SQL执行前进行数据过滤。此外,还展示了如何在服务层调用这些功能,确保数据的安全访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 问题:项目要求数据权限配置查询,全部、自定义、部门、部门及下级部门、个人。要求做统一处理。
  2. 分析:
  3. 数据权限精确到个人。那么每张表里面都要有创建人字段。每次插入数据都要保存创建人。查询的时候才能区分。
  4. mybatis-plus统一处理创建时间,创建人,更新时间,更新人统一处理创建人
  5. 查询的时候每个查询加条件代码太复杂。所以sql加统一处理例:
  6. SELECT %s FROM (%s) temp_data_scope WHERE temp_data_scope.%s IN (%s)
  7. 第一个%s:要查询的字段
  8. 第二个%s:sql语句例:select * from user
  9. 第三个%s:条件字段,从 第二个%s里面挑选
  10. 第四个%s:查询的值 

具体实现:

创建一个公共的entity实体类,所有的实体类继承这个类,当然你的表里面要有相应的字段

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;

import java.time.LocalDateTime;


/**
 * 父级实体-公共属性
 * @param
 */
@Data
@Accessors(chain = true)
public class OkayxBaseEntity<T extends OkayxBaseEntity<?>> extends Model{

	/**
	 * 更新者
	 */
	@ApiModelProperty(value="更新者")
	@TableField(fill= FieldFill.INSERT_UPDATE)
	private Integer updateBy;

	/**
	 * 创建者
	 */
	@ApiModelProperty(value="创建者")
	@TableField(fill= FieldFill.INSERT)
	private Integer createBy;

	/**
	 * 创建时间
	 */
	@ApiModelProperty(value="创建时间")
	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
	@TableField(fill= FieldFill.INSERT)
	private LocalDateTime createTime;

	/**
	 * 更新时间
	 */
	@ApiModelProperty(value="更新时间")
	@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
	@TableField(fill= FieldFill.INSERT_UPDATE)
	private LocalDateTime updateTime;

	/**
	 * 是否删除
	 */
	@ApiModelProperty(value="delFlag")
	private String delFlag;

}

数据权限等级枚举类,枚举类一般对应权限管理,一起存在权限表。例:

 

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 数据权限类型
 */
@Getter
@AllArgsConstructor
public enum DataScopeTypeEnum {

	/**
	 * 查询全部数据
	 */
	ALL(0, "全部"),

	/**
	 * 自定义
	 */
	CUSTOM(1, "自定义"),

	/**
	 * 本级及子级
	 */
	OWN_CHILD_LEVEL(2, "本级及子级"),

	/**
	 * 本级
	 */
	OWN_LEVEL(3, "本级"),

	/**
	 * 个人(自己)
	 */
	OWN(4,"个人");


	/**
	 * 类型
	 */
	private final int type;

	/**
	 * 描述
	 */
	private final String description;

}

数据权限的函数类型,(查询全部字段,查询条数),看上面的分析 ,也就是第一个%s

/**
 * 数据权限函数类型
 */
@Getter
@AllArgsConstructor
public enum DataScopeFunc
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值