Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄嘉阳
/
iot-platform-server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
bdfecd6f
authored
Sep 25, 2023
by
李小龙
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
fix:29138
parent
f0806f85
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
156 additions
and
4 deletions
server-common/src/main/java/com/makeit/config/mybatis/MybatisPlusConfig.java
server-common/src/main/java/com/makeit/config/mybatis/tenant/DataScopeHandler.java
server-common/src/main/java/com/makeit/config/mybatis/tenant/DataScopeInterceptor.java
server-common/src/main/java/com/makeit/enums/Const.java
server-common/src/main/java/com/makeit/enums/HeaderConst.java
server-common/src/main/java/com/makeit/utils/request/RequestUtil.java
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
server-common/src/main/java/com/makeit/config/mybatis/MybatisPlusConfig.java
View file @
bdfecd6f
...
@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInt
...
@@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInt
import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor
;
import
com.makeit.config.mybatis.interceptor.EmptyListInterceptor
;
import
com.makeit.config.mybatis.interceptor.EmptyListInterceptor
;
import
com.makeit.config.mybatis.tenant.DataScopeHandler
;
import
com.makeit.config.mybatis.tenant.DataScopeInterceptor
;
import
com.makeit.config.mybatis.tenant.FactoryTableProperties
;
import
com.makeit.config.mybatis.tenant.TenantIdHandler
;
import
com.makeit.config.mybatis.tenant.TenantIdHandler
;
import
com.makeit.config.mybatis.tenant.TenantIdInterceptor
;
import
com.makeit.config.mybatis.tenant.TenantIdInterceptor
;
import
com.makeit.config.mybatis.tenant.FactoryTableProperties
;
import
com.makeit.enums.CodeMessageEnum
;
import
com.makeit.enums.CodeMessageEnum
;
import
com.makeit.enums.Const
;
import
com.makeit.enums.Const
;
import
com.makeit.exception.BusinessException
;
import
com.makeit.exception.BusinessException
;
...
@@ -43,14 +45,17 @@ public class MybatisPlusConfig {
...
@@ -43,14 +45,17 @@ public class MybatisPlusConfig {
interceptor
.
addInnerInterceptor
(
new
EmptyListInterceptor
());
interceptor
.
addInnerInterceptor
(
new
EmptyListInterceptor
());
interceptor
.
addInnerInterceptor
(
tenantLineInnerInterceptor
(
));
interceptor
.
addInnerInterceptor
(
new
DataScopeInterceptor
(
new
DataScopeHandler
()
));
interceptor
.
addInnerInterceptor
(
tenantLineInnerInterceptor
());
interceptor
.
addInnerInterceptor
(
new
PaginationInnerInterceptor
());
interceptor
.
addInnerInterceptor
(
new
PaginationInnerInterceptor
());
interceptor
.
addInnerInterceptor
(
new
OptimisticLockerInnerInterceptor
());
interceptor
.
addInnerInterceptor
(
new
OptimisticLockerInnerInterceptor
());
return
interceptor
;
return
interceptor
;
}
}
...
@@ -106,5 +111,4 @@ public class MybatisPlusConfig {
...
@@ -106,5 +111,4 @@ public class MybatisPlusConfig {
public
TenantLineInnerInterceptor
tenantLineInnerInterceptor
()
{
public
TenantLineInnerInterceptor
tenantLineInnerInterceptor
()
{
return
new
TenantIdInterceptor
(
tenantLineHandler
());
return
new
TenantIdInterceptor
(
tenantLineHandler
());
}
}
}
}
server-common/src/main/java/com/makeit/config/mybatis/tenant/DataScopeHandler.java
0 → 100644
View file @
bdfecd6f
package
com
.
makeit
.
config
.
mybatis
.
tenant
;
import
com.makeit.enums.Const
;
import
com.makeit.utils.request.RequestUtil
;
import
net.sf.jsqlparser.expression.Alias
;
import
net.sf.jsqlparser.expression.Expression
;
import
net.sf.jsqlparser.expression.HexValue
;
import
net.sf.jsqlparser.expression.LongValue
;
import
net.sf.jsqlparser.expression.operators.conditional.AndExpression
;
import
net.sf.jsqlparser.expression.operators.relational.ExpressionList
;
import
net.sf.jsqlparser.expression.operators.relational.InExpression
;
import
net.sf.jsqlparser.expression.operators.relational.ItemsList
;
import
net.sf.jsqlparser.schema.Column
;
import
net.sf.jsqlparser.schema.Table
;
import
net.sf.jsqlparser.statement.select.PlainSelect
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
public
class
DataScopeHandler
{
/**
* 获取数据权限 SQL 片段
*
* @return JSqlParser 条件表达式
*/
public
Expression
getSqlSegment
(
PlainSelect
plainSelect
,
String
whereSegment
){
Expression
where
=
plainSelect
.
getWhere
();
if
(
where
==
null
)
{
where
=
new
HexValue
(
" 1 = 1 "
);
}
Table
fromItem
=
(
Table
)
plainSelect
.
getFromItem
();
// 有别名用别名,无别名用表名,防止字段冲突报错
Alias
fromItemAlias
=
fromItem
.
getAlias
();
String
mainTableName
=
fromItemAlias
==
null
?
fromItem
.
getName
()
:
fromItemAlias
.
getName
();
String
dataScope
=
RequestUtil
.
getDataScope
();
String
[]
orgIds
=
dataScope
.
split
(
Const
.
COMMON_SPLIT
);
// 把集合转变为JSQLParser需要的元素列表
ItemsList
orgIdList
=
new
ExpressionList
(
Stream
.
of
(
orgIds
).
map
(
LongValue:
:
new
).
collect
(
Collectors
.
toList
()));
InExpression
inExpression
=
new
InExpression
(
new
Column
(
mainTableName
+
".org_id"
),
orgIdList
);
return
new
AndExpression
(
where
,
inExpression
);
}
}
server-common/src/main/java/com/makeit/config/mybatis/tenant/DataScopeInterceptor.java
0 → 100644
View file @
bdfecd6f
package
com
.
makeit
.
config
.
mybatis
.
tenant
;
import
com.baomidou.mybatisplus.core.metadata.TableFieldInfo
;
import
com.baomidou.mybatisplus.core.metadata.TableInfoHelper
;
import
com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper
;
import
com.baomidou.mybatisplus.core.toolkit.PluginUtils
;
import
com.baomidou.mybatisplus.extension.parser.JsqlParserSupport
;
import
com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor
;
import
com.makeit.enums.Const
;
import
com.makeit.utils.data.convert.StreamUtil
;
import
com.makeit.utils.request.RequestUtil
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.NoArgsConstructor
;
import
lombok.ToString
;
import
net.sf.jsqlparser.expression.Expression
;
import
net.sf.jsqlparser.schema.Table
;
import
net.sf.jsqlparser.statement.select.PlainSelect
;
import
net.sf.jsqlparser.statement.select.Select
;
import
net.sf.jsqlparser.statement.select.SelectBody
;
import
net.sf.jsqlparser.statement.select.SetOperationList
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.ibatis.executor.Executor
;
import
org.apache.ibatis.mapping.BoundSql
;
import
org.apache.ibatis.mapping.MappedStatement
;
import
org.apache.ibatis.session.ResultHandler
;
import
org.apache.ibatis.session.RowBounds
;
import
org.springframework.stereotype.Component
;
import
java.sql.SQLException
;
import
java.util.Arrays
;
import
java.util.List
;
@Data
@NoArgsConstructor
@ToString
(
callSuper
=
true
)
@EqualsAndHashCode
(
callSuper
=
true
)
@Component
public
class
DataScopeInterceptor
extends
JsqlParserSupport
implements
InnerInterceptor
{
private
DataScopeHandler
dataScopeHandler
;
public
DataScopeInterceptor
(
DataScopeHandler
dataScopeHandler
)
{
this
.
dataScopeHandler
=
dataScopeHandler
;
}
@Override
protected
void
processSelect
(
Select
select
,
int
index
,
String
sql
,
Object
obj
)
{
//platOrgId = plat_role.data_scope = org_id 逗号隔开
//请求头没有指定字段platOrgId跳过||platOrgId 为空 ||platOrgId = tenantId 跳过
String
dataScope
=
RequestUtil
.
getDataScope
();
String
tenantId
=
RequestUtil
.
getTenantIdHeader
();
if
(
StringUtils
.
isBlank
(
dataScope
)||
StringUtils
.
isBlank
(
tenantId
)){
return
;
}
String
[]
orgIds
=
dataScope
.
split
(
Const
.
COMMON_SPLIT
);
List
<
String
>
orgIdList
=
Arrays
.
asList
(
orgIds
);
if
(
orgIdList
.
contains
(
tenantId
)){
return
;
}
String
tableName
=
((
Table
)
((
PlainSelect
)
select
.
getSelectBody
()).
getFromItem
()).
getName
();
//没有org_id 表字段跳过
List
<
TableFieldInfo
>
fieldInfoList
=
TableInfoHelper
.
getTableInfo
(
tableName
).
getFieldList
();
boolean
existsOrgId
=
StreamUtil
.
anyMatch
(
fieldInfoList
,
e
->
Const
.
ORG_ID
.
equals
(
e
.
getColumn
()));
if
(!
existsOrgId
){
return
;
}
SelectBody
selectBody
=
select
.
getSelectBody
();
if
(
selectBody
instanceof
PlainSelect
)
{
this
.
setWhere
((
PlainSelect
)
selectBody
,
(
String
)
obj
);
}
else
if
(
selectBody
instanceof
SetOperationList
)
{
SetOperationList
setOperationList
=
(
SetOperationList
)
selectBody
;
List
<
SelectBody
>
selectBodyList
=
setOperationList
.
getSelects
();
selectBodyList
.
forEach
(
s
->
this
.
setWhere
((
PlainSelect
)
s
,
(
String
)
obj
));
}
}
/**
* 设置 where 条件
*
* @param plainSelect 查询对象
* @param whereSegment 查询条件片段
*/
private
void
setWhere
(
PlainSelect
plainSelect
,
String
whereSegment
)
{
Expression
sqlSegment
=
dataScopeHandler
.
getSqlSegment
(
plainSelect
,
whereSegment
);
if
(
null
!=
sqlSegment
)
{
plainSelect
.
setWhere
(
sqlSegment
);
}
}
@Override
public
void
beforeQuery
(
Executor
executor
,
MappedStatement
ms
,
Object
parameter
,
RowBounds
rowBounds
,
ResultHandler
resultHandler
,
BoundSql
boundSql
)
throws
SQLException
{
if
(
InterceptorIgnoreHelper
.
willIgnoreDataPermission
(
ms
.
getId
()))
{
return
;
}
PluginUtils
.
MPBoundSql
mpBs
=
PluginUtils
.
mpBoundSql
(
boundSql
);
mpBs
.
sql
(
this
.
parserSingle
(
mpBs
.
sql
(),
ms
.
getId
()));
}
}
server-common/src/main/java/com/makeit/enums/Const.java
View file @
bdfecd6f
...
@@ -22,6 +22,8 @@ public class Const {
...
@@ -22,6 +22,8 @@ public class Const {
public
static
final
String
FUTURE
=
"期货"
;
public
static
final
String
FUTURE
=
"期货"
;
public
static
final
String
FUTURE_ENG
=
"future"
;
public
static
final
String
FUTURE_ENG
=
"future"
;
public
static
final
String
ORG_ID
=
"org_id"
;
// 编码
// 编码
public
static
final
String
UTF8_CHAR_ENCODING
=
"utf-8"
;
public
static
final
String
UTF8_CHAR_ENCODING
=
"utf-8"
;
...
...
server-common/src/main/java/com/makeit/enums/HeaderConst.java
View file @
bdfecd6f
...
@@ -22,4 +22,6 @@ public class HeaderConst {
...
@@ -22,4 +22,6 @@ public class HeaderConst {
public
static
final
String
ZONE_ID
=
"zoneId"
;
public
static
final
String
ZONE_ID
=
"zoneId"
;
public
static
final
String
FEIGN_NO_REMOVE
=
"feignNoRemove"
;
public
static
final
String
FEIGN_NO_REMOVE
=
"feignNoRemove"
;
public
static
final
String
DATA_SCOPE
=
"data-scope"
;
}
}
server-common/src/main/java/com/makeit/utils/request/RequestUtil.java
View file @
bdfecd6f
...
@@ -105,4 +105,7 @@ public class RequestUtil {
...
@@ -105,4 +105,7 @@ public class RequestUtil {
// }
// }
//
//
public
static
String
getDataScope
(){
return
getHeader
(
HeaderConst
.
DATA_SCOPE
);
}
}
}
server-web/src/main/java/com/makeit/mqtt/PushCallback.java
View file @
bdfecd6f
...
@@ -64,7 +64,7 @@ public class PushCallback implements MqttCallback {
...
@@ -64,7 +64,7 @@ public class PushCallback implements MqttCallback {
DeviceInfo
device
=
JSON
.
parseObject
(
payload
,
DeviceInfo
.
class
);
DeviceInfo
device
=
JSON
.
parseObject
(
payload
,
DeviceInfo
.
class
);
// todo
// todo
//
checkAlarm(device);
checkAlarm
(
device
);
}
}
@Override
@Override
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment