Skip to content

Commit 6ee0ebe

Browse files
committed
add springboot-starter-data-authorization
1 parent dfff4a8 commit 6ee0ebe

File tree

63 files changed

+6105
-9
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+6105
-9
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ v.3.x 为springboot 3.x版本,使用jdk17版本
1818

1919
* springboot-starter | Springboot领域驱动框架
2020
* springboot-starter-data-fast | 快速数据呈现框架
21+
* springboot-starter-data-authorization | 数据权限框架
2122
* springboot-starter-flow | 流程引擎框架
2223
* springboot-starter-security | security权限框架支持基于JWT的无状态权限认证与Redis的有状态权限认证
2324

@@ -42,6 +43,13 @@ v.3.x 为springboot 3.x版本,使用jdk17版本
4243
<version>${last.version}</version>
4344
</dependency>
4445
46+
<!-- 数据权限框架 -->
47+
<dependency>
48+
<groupId>com.codingapi.springboot</groupId>
49+
<artifactId>springboot-starter-data-authorization</artifactId>
50+
<version>${last.version}</version>
51+
</dependency>
52+
4553
<!-- 流程引擎框架 -->
4654
<dependency>
4755
<groupId>com.codingapi.springboot</groupId>

pom.xml

+17-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
44
<modelVersion>4.0.0</modelVersion>
55
<packaging>pom</packaging>
6+
<modules>
7+
<module>springboot-starter-data-authorization</module>
8+
</modules>
69
<parent>
710
<groupId>org.springframework.boot</groupId>
811
<artifactId>spring-boot-starter-parent</artifactId>
@@ -12,7 +15,7 @@
1215

1316
<groupId>com.codingapi.springboot</groupId>
1417
<artifactId>springboot-parent</artifactId>
15-
<version>2.9.14</version>
18+
<version>2.9.15</version>
1619

1720
<url>https://github.com/codingapi/springboot-framewrok</url>
1821
<name>springboot-parent</name>
@@ -45,6 +48,7 @@
4548
<apache-groovy.version>4.0.24</apache-groovy.version>
4649
<h2.version>2.3.232</h2.version>
4750
<esotericsoftware.kryo.version>5.6.2</esotericsoftware.kryo.version>
51+
<jsqlparser.version>5.0</jsqlparser.version>
4852
</properties>
4953

5054
<dependencies>
@@ -209,6 +213,12 @@
209213
<version>${apache-groovy.version}</version>
210214
</dependency>
211215

216+
<dependency>
217+
<groupId>com.github.jsqlparser</groupId>
218+
<artifactId>jsqlparser</artifactId>
219+
<version>${jsqlparser.version}</version>
220+
</dependency>
221+
212222
</dependencies>
213223
</dependencyManagement>
214224

@@ -269,9 +279,10 @@
269279
</activation>
270280
<modules>
271281
<module>springboot-starter</module>
272-
<module>springboot-starter-flow</module>
273282
<module>springboot-starter-security</module>
283+
<module>springboot-starter-data-authorization</module>
274284
<module>springboot-starter-data-fast</module>
285+
<module>springboot-starter-flow</module>
275286
</modules>
276287
</profile>
277288

@@ -281,9 +292,10 @@
281292

282293
<modules>
283294
<module>springboot-starter</module>
284-
<module>springboot-starter-flow</module>
285295
<module>springboot-starter-security</module>
296+
<module>springboot-starter-data-authorization</module>
286297
<module>springboot-starter-data-fast</module>
298+
<module>springboot-starter-flow</module>
287299
</modules>
288300

289301
<build>
@@ -331,9 +343,10 @@
331343

332344
<modules>
333345
<module>springboot-starter</module>
334-
<module>springboot-starter-flow</module>
335346
<module>springboot-starter-security</module>
347+
<module>springboot-starter-data-authorization</module>
336348
<module>springboot-starter-data-fast</module>
349+
<module>springboot-starter-flow</module>
337350
</modules>
338351

339352

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<artifactId>springboot-parent</artifactId>
8+
<groupId>com.codingapi.springboot</groupId>
9+
<version>2.9.15</version>
10+
</parent>
11+
12+
<artifactId>springboot-starter-data-authorization</artifactId>
13+
<description>springboot-starter-data-authorization project for Spring Boot</description>
14+
15+
<properties>
16+
<java.version>8</java.version>
17+
</properties>
18+
19+
20+
<dependencies>
21+
<dependency>
22+
<groupId>com.github.jsqlparser</groupId>
23+
<artifactId>jsqlparser</artifactId>
24+
</dependency>
25+
26+
<dependency>
27+
<groupId>org.springframework.boot</groupId>
28+
<artifactId>spring-boot-starter-data-jpa</artifactId>
29+
<scope>test</scope>
30+
</dependency>
31+
32+
<dependency>
33+
<groupId>org.springframework.boot</groupId>
34+
<artifactId>spring-boot-starter-data-jdbc</artifactId>
35+
<scope>test</scope>
36+
</dependency>
37+
38+
<dependency>
39+
<groupId>com.h2database</groupId>
40+
<artifactId>h2</artifactId>
41+
<scope>test</scope>
42+
</dependency>
43+
44+
<dependency>
45+
<groupId>com.mysql</groupId>
46+
<artifactId>mysql-connector-j</artifactId>
47+
<scope>test</scope>
48+
</dependency>
49+
50+
</dependencies>
51+
52+
53+
<build>
54+
<plugins>
55+
<plugin>
56+
<groupId>org.jacoco</groupId>
57+
<artifactId>jacoco-maven-plugin</artifactId>
58+
<version>0.8.12</version>
59+
<executions>
60+
<execution>
61+
<goals>
62+
<goal>prepare-agent</goal>
63+
</goals>
64+
</execution>
65+
<execution>
66+
<id>report</id>
67+
<phase>test</phase>
68+
<goals>
69+
<goal>report</goal>
70+
</goals>
71+
</execution>
72+
</executions>
73+
</plugin>
74+
75+
</plugins>
76+
</build>
77+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.codingapi.springboot.authorization;
2+
3+
4+
import com.codingapi.springboot.authorization.filter.DataAuthorizationFilter;
5+
import com.codingapi.springboot.authorization.handler.ColumnHandler;
6+
import com.codingapi.springboot.authorization.handler.RowHandler;
7+
import com.codingapi.springboot.authorization.interceptor.SQLInterceptor;
8+
import com.codingapi.springboot.authorization.properties.DataAuthorizationProperties;
9+
import com.codingapi.springboot.authorization.register.ConditionHandlerRegister;
10+
import com.codingapi.springboot.authorization.register.DataAuthorizationContextRegister;
11+
import com.codingapi.springboot.authorization.register.ResultSetHandlerRegister;
12+
import com.codingapi.springboot.authorization.register.SQLInterceptorRegister;
13+
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.boot.context.properties.ConfigurationProperties;
15+
import org.springframework.context.annotation.Bean;
16+
import org.springframework.context.annotation.Configuration;
17+
18+
import java.util.List;
19+
20+
@Configuration
21+
public class DataAuthorizationConfiguration {
22+
23+
@Bean
24+
@ConfigurationProperties(prefix = "codingapi.data-authorization")
25+
public DataAuthorizationProperties dataAuthorizationProperties(){
26+
return new DataAuthorizationProperties();
27+
}
28+
29+
@Bean
30+
public ConditionHandlerRegister conditionHandlerRegister(@Autowired(required = false) RowHandler rowHandler) {
31+
return new ConditionHandlerRegister(rowHandler);
32+
}
33+
34+
@Bean
35+
public ResultSetHandlerRegister resultSetHandlerRegister(@Autowired(required = false) ColumnHandler columnHandler) {
36+
return new ResultSetHandlerRegister(columnHandler);
37+
}
38+
39+
@Bean
40+
public SQLInterceptorRegister sqlInterceptorRegister(@Autowired(required = false) SQLInterceptor sqlInterceptor) {
41+
return new SQLInterceptorRegister(sqlInterceptor);
42+
}
43+
44+
@Bean
45+
public DataAuthorizationContextRegister dataAuthorizationContextRegister(@Autowired(required = false) List<DataAuthorizationFilter> dataAuthorizationFilters) {
46+
return new DataAuthorizationContextRegister(dataAuthorizationFilters);
47+
}
48+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.codingapi.springboot.authorization;
2+
3+
import com.codingapi.springboot.authorization.filter.DataAuthorizationFilter;
4+
import com.codingapi.springboot.authorization.handler.Condition;
5+
import com.codingapi.springboot.authorization.interceptor.SQLInterceptState;
6+
import lombok.Getter;
7+
import org.springframework.util.StringUtils;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
/**
13+
* 数据权限上下文
14+
*/
15+
public class DataAuthorizationContext {
16+
17+
@Getter
18+
private final static DataAuthorizationContext instance = new DataAuthorizationContext();
19+
20+
private final List<DataAuthorizationFilter> filters;
21+
22+
private DataAuthorizationContext() {
23+
this.filters = new ArrayList<>();
24+
}
25+
26+
/**
27+
* 添加数据权限过滤器
28+
* @param filter 数据权限过滤器
29+
*/
30+
public void addDataAuthorizationFilter(DataAuthorizationFilter filter) {
31+
this.filters.add(filter);
32+
}
33+
34+
/**
35+
* 清空数据权限过滤器
36+
*/
37+
public void clearDataAuthorizationFilters() {
38+
this.filters.clear();
39+
}
40+
41+
/**
42+
* 列权限
43+
* @param interceptState 拦截状态
44+
* @param tableName 表名(或别名)
45+
* @param columnName 列名 (或别名)
46+
* @param value 值
47+
* @return T
48+
* @param <T> 泛型
49+
*/
50+
public <T> T columnAuthorization(SQLInterceptState interceptState, String tableName, String columnName, T value) {
51+
if (interceptState != null && interceptState.hasIntercept()) {
52+
String realTableName = interceptState.getTableName(tableName);
53+
String realColumnName = interceptState.getColumnName(tableName,columnName);
54+
55+
for (DataAuthorizationFilter filter : filters) {
56+
if (filter.supportColumnAuthorization(realTableName, realColumnName, value)) {
57+
return filter.columnAuthorization(realTableName, realColumnName, value);
58+
}
59+
}
60+
}
61+
return value;
62+
}
63+
64+
/**
65+
* 行权限
66+
* @param tableName 表名
67+
* @param tableAlias 别名
68+
* @return Condition 增加的过滤条件
69+
*/
70+
public Condition rowAuthorization(String tableName, String tableAlias) {
71+
if (StringUtils.hasText(tableName) && StringUtils.hasText(tableAlias)) {
72+
for (DataAuthorizationFilter filter : filters) {
73+
if (filter.supportRowAuthorization(tableName, tableAlias)) {
74+
return filter.rowAuthorization(tableName, tableAlias);
75+
}
76+
}
77+
}
78+
return null;
79+
}
80+
81+
}

0 commit comments

Comments
 (0)