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