8000 GitHub - zoulinchuan/easy-data-scope: 一个简单的数据权限处理方案
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

zoulinchuan/easy-data-scope

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简介

这是一个可以通过注解方式快速实现数据权限的项目,他可以让你在项目中使用注解变可以快速实现数据权限

  • 配置简单
  • 使用便捷
导入依赖
<dependency>
    <groupId>cn.zlinchuan</groupId>
    <artifactId>ds-mybatis</artifactId>
    <version>1.0.1</version>
</dependency>
开启数据权限处理
image
定义数据权限查找规则
image

现在就可以直接开启注解使用了!!

核心注解

public @interface DataScope {
    /**
     * 通过传递给DataScopeFindRule.find方法来获取指定的数据权限实体
     * @return
     */
    String[] keys();

    /**
     * 构建模板
     * TODO 注意:当key为多个时此值生效
     * key1 ==SQL==> table1.column1 = 1
     * key2 ==SQL==> table2.column2 = 2
     * 示例:template = "{key1} OR {key2}"
     * 通过template生成后的SQL:table1.column1 = 1 OR table2.column2 = 2
     * @return
     */
    String template() default "";

    /**
     * 是否对数据权限进行自动合并
     * 当操作符为 =、!= 时间如果TableName、ColumnName、操作符一样,并且使用的是 Value 形式将会对数据权限进行合并为 IN、NOT IN
     * 示例:
     * 权限1:=、table1、column1、Value1 >>> table1.column1 = Value1
     * 权限2:=、table1、column1、Value2 >>> table1.column1 = Value2
     * 最终合并 in table1、column1、“Value1, Value2" >>> table1.column1 in (Value1, Value2)
     * @return
     */
    boolean merge() default false;

    /**
     * 逻辑符
     * 决定数据权限SQL拼接到当前执行的SQL中用的使用的是 AND还是OR..
     * TODO 注意:在flag为true时此值将会失效
     * @return
     */
    String logical() default SqlConsts.AND;

    /**
     * 是否使用数据权限标记位标记位,true是 false否
     * @return
     */
    boolean flag() default false;
}

使用方式1(直接拼接)

直通过获取注解的logical属性, 在原SQL中以AND或OR的形式直接拼接在SQL末尾

优势:简单、无代码侵入

缺点:对复杂查询显得力不从心

使用1: 任意方法
image

生成SQL

 SELECT `id`, `username`, `age` FROM `user` WHERE  /*这是使用template生成的SQL*/user.id   IN  (1, 2, 3) OR user.age > 10  AND (/*这是使用template生成的SQL*/user.id   IN  (1, 2, 3) OR user.age > 10)
使用2:MyBatis
image image

生成SQL

select * from user where id = ? OR (/*这是使用template生成的SQL*/user.id   IN  (1, 2, 3) OR user.age > 10)

使用方式2(占位符替换)

通过将生成好的数据权限SQL替换到在SQL中所定义的特殊占位

优势:能够支持相较于【直接拼接】方案更复杂的SQL

缺点:对SQL有一定侵入性

使用1: 任意方法
image

生成SQL

SELECT * FROM (SELECT `id`, `username`, `age` FROM `user` WHERE  user.id   IN  (1, 2, 3) OR user.age > 10/*这是使用template生成的SQL*/ ) AS `t` WHERE  id = 1  ORDER BY id
使用2:MyBatis
image image

生成SQL

select * from (select * from user where user.id   IN  (1, 2, 3) OR user.age > 10/*这是使用template生成的SQL*/) t where id = 1

支持情况

  • 原生mybatis ✅
  • mybatis-plus (开发中... 兼容早期分页实现,暂不支持占位符使用方式)
  • mybatis-flex ✅