Skip to content

Commit ac65747

Browse files
committed
add wiki
1 parent bd28ac2 commit ac65747

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
springboot-starter-data-authorization
2+
3+
数据权限框架
4+
5+
## 框架介绍
6+
7+
基于JDBC的拦截机制实现对数据表列与行的数据查询权限控制。
8+
9+
## 使用教程
10+
11+
1. 配置数据库的JDBC驱动地址为 `com.codingapi.springboot.authorization.jdbc.AuthorizationJdbcDriver`
12+
```
13+
spring.datasource.driver-class-name=com.codingapi.springboot.authorization.jdbc.AuthorizationJdbcDriver
14+
spring.datasource.url=jdbc:h2:file:./test.db
15+
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
16+
spring.jpa.hibernate.ddl-auto=create-drop
17+
spring.jpa.show-sql=true
18+
19+
```
20+
2. 配置数据权限DataAuthorizationFilter的实现
21+
接口定义
22+
```java
23+
24+
/**
25+
* 数据权限过滤器
26+
*/
27+
public interface DataAuthorizationFilter {
28+
29+
/**
30+
* 列权限过滤
31+
* @param tableName 表名
32+
* @param columnName 列名
33+
* @param value 值
34+
* @return 过滤后的值
35+
* @param <T> T
36+
*/
37+
<T> T columnAuthorization(String tableName, String columnName,T value);
38+
39+
/**
40+
* 行权限过滤
41+
* @param tableName 表名
42+
* @param tableAlias 表别名
43+
* @return 过滤后拦截sql条件
44+
*/
45+
Condition rowAuthorization(String tableName, String tableAlias);
46+
47+
/**
48+
* 是否支持列权限过滤
49+
* @param tableName 表名
50+
* @param columnName 列名
51+
* @param value 值
52+
* @return 是否支持
53+
*/
54+
boolean supportColumnAuthorization(String tableName, String columnName, Object value);
55+
56+
/**
57+
* 是否支持行权限过滤
58+
* @param tableName 表名
59+
* @param tableAlias 表别名
60+
* @return 是否支持
61+
*/
62+
boolean supportRowAuthorization(String tableName, String tableAlias);
63+
}
64+
65+
66+
```
67+
实例实现:
68+
```
69+
70+
ColumnMaskContext.getInstance().addColumnMask(new IDCardMask());
71+
ColumnMaskContext.getInstance().addColumnMask(new PhoneMask());
72+
ColumnMaskContext.getInstance().addColumnMask(new BankCardMask());
73+
74+
DataAuthorizationContext.getInstance().addDataAuthorizationFilter(new DataAuthorizationFilter() {
75+
@Override
76+
public <T> T columnAuthorization(String tableName, String columnName, T value) {
77+
return ColumnMaskContext.getInstance().mask(value);
78+
}
79+
80+
@Override
81+
public Condition rowAuthorization(String tableName, String tableAlias) {
82+
if (tableName.equalsIgnoreCase("t_user")) {
83+
String conditionTemplate = "%s.id > 1 ";
84+
return Condition.formatCondition(conditionTemplate, tableAlias);
85+
}
86+
return null;
87+
}
88+
89+
@Override
90+
public boolean supportColumnAuthorization(String tableName, String columnName, Object value) {
91+
return true;
92+
}
93+
94+
@Override
95+
public boolean supportRowAuthorization(String tableName, String tableAlias) {
96+
return true;
97+
}
98+
});
99+
```
100+
101+
实现的拦截器,需要添加到DataAuthorizationContext.getInstance()中才可以使用。可以通过上述实例的手动模式添加,
102+
也可以通过定义DataAuthorizationFilter的@Bean方式添加,当设置为@Bean时既可以自动加入到DataAuthorizationContext.getInstance()中。
103+

0 commit comments

Comments
 (0)