Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
iBiz4j Spring R7
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
iBiz-R7后台标准模板
iBiz4j Spring R7
提交
ccf5d0a0
提交
ccf5d0a0
编写于
5月 13, 2020
作者:
zhouweidong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
权限调整
上级
d64ffe15
变更
1
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
73 行增加
和
76 行删除
+73
-76
AuthPermissionEvaluator.java.ftl
...S_PKGPATH%/util/security/AuthPermissionEvaluator.java.ftl
+73
-76
未找到文件。
SLN/%PUBPRJ%-util/src/main/java/%SYS_PKGPATH%/util/security/AuthPermissionEvaluator.java.ftl
浏览文件 @
ccf5d0a0
...
...
@@ -118,8 +118,8 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
if
(
!validDataSetHasPermission(permissionList,entityName,dataSetName)){
return
false
;
}
//
拼接权限条件
deDataSetFillPermissionSQLRouter
(
deStorageMode
,
searchContext
,
entity
,
dataSetName
,
permissionList
);
<#--//
拼接权限条件
-->
<#--
deDataSetFillPermissionSQLRouter
(
deStorageMode
,
searchContext
,
entity
,
dataSetName
,
permissionList
);-->
}
return
true
;
}
...
...
@@ -347,80 +347,77 @@ public class AuthPermissionEvaluator implements PermissionEvaluator {
}
}
/**
*
根据实体存储类型,拼接权限条件
*
@
param
deStorageMode
*
@
param
searchContext
*
@
param
entity
*
@
param
dataSetName
*
@
param
permissionList
*/
private
void
deDataSetFillPermissionSQLRouter
(
String
deStorageMode
,
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
){
//
检查是否有数据权限
[
单行删除
]
if
(
deStorageMode
.
equalsIgnoreCase
(
"sql"
)){
sqlPermissionBuilder
(
searchContext
,
entity
,
dataSetName
,
permissionList
);
}
else
if
(
deStorageMode
.
equalsIgnoreCase
(
"nosql"
)){
noSqlPermissionBuilder
(
searchContext
,
entity
,
dataSetName
,
permissionList
);
}
else
if
(
deStorageMode
.
equalsIgnoreCase
(
"serviceapi"
)){
}
else
{
throw
new
RuntimeException
(
String
.
format
(
"未能识别[%s]实体对应存储模式[%s]"
,
entity
.
getClass
().
getSimpleName
(),
deStorageMode
));
}
}
/**
*
为
NoSQL
存储模式的表格查询填充权限条件
*
@
param
searchContext
*
@
param
entity
*
@
param
dataSetName
*
@
param
permissionList
*/
private
void
noSqlPermissionBuilder
(
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
)
{
if
(
searchContext
instanceof
QueryBuildContext
){
//
获取权限表达式
[
全部数据、本单位、本部门等
]
String
entityName
=
entity
.
getClass
().
getSimpleName
();
JSONObject
entityObj
=
permissionList
.
getJSONObject
(
entityName
);
JSONObject
permissionType
=
entityObj
.
getJSONObject
(
DataSetTag
);
JSONArray
dataRange
=
permissionType
.
getJSONArray
(
dataSetName
);
if
(
dataRange
.
size
()==
0
)
return
;
//
根据权限表达式生成查询条件,并将查询条件设置到
SearchContext
中
fillNoSqlPermissionCond
(
dataRange
,
entity
,((
QueryBuildContext
)
searchContext
).
getSelectCond
());
}
}
/**
*
为
SQL
存储模式的表格查询填充权限条件
*
@
param
searchContext
*
@
param
entity
*
@
param
dataSetName
*
@
param
permissionList
*/
private
void
sqlPermissionBuilder
(
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
){
//
获取权限表达式
[
全部数据、本单位、本部门等
]
String
entityName
=
entity
.
getClass
().
getSimpleName
();
JSONObject
entityObj
=
permissionList
.
getJSONObject
(
entityName
);//
获取实体
JSONObject
permissionType
=
entityObj
.
getJSONObject
(
DataSetTag
);
JSONArray
dataRange
=
permissionType
.
getJSONArray
(
dataSetName
);//
获取实体数据集
if
(
dataRange
.
size
()==
0
)
return
;
//
根据权限条件获取
SQL
String
permissionSQL
=
getPermissionSQL
(
entity
,
dataRange
);
//
将
SQL
拼接到
SearchContext
中
if
(
searchContext
instanceof
QueryWrapperContext
){
QueryWrapperContext
queryWrapperContext
=
(
QueryWrapperContext
)
searchContext
;
QueryWrapper
queryWrapper
=
queryWrapperContext
.
getSelectCond
();
queryWrapper
.
apply
(
permissionSQL
);
}
}
<#--/**-->
<#--*
根据实体存储类型,拼接权限条件
-->
<#--*
@
param
deStorageMode
-->
<#--*
@
param
searchContext
-->
<#--*
@
param
entity
-->
<#--*
@
param
dataSetName
-->
<#--*
@
param
permissionList
-->
<#--*/-->
<#--
private
void
deDataSetFillPermissionSQLRouter
(
String
deStorageMode
,
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
){-->
<#--//
检查是否有数据权限
[
单行删除
]-->
<#--
if
(
deStorageMode
.
equalsIgnoreCase
(
"sql"
)){-->
<#--
sqlPermissionBuilder
(
searchContext
,
entity
,
dataSetName
,
permissionList
);-->
<#--}-->
<#--
else
if
(
deStorageMode
.
equalsIgnoreCase
(
"nosql"
)){-->
<#--
noSqlPermissionBuilder
(
searchContext
,
entity
,
dataSetName
,
permissionList
);-->
<#--}-->
<#--
else
if
(
deStorageMode
.
equalsIgnoreCase
(
"serviceapi"
)){-->
<#--}-->
<#--
else
{-->
<#--
throw
new
RuntimeException
(
String
.
format
(
"未能识别[%s]实体对应存储模式[%s]"
,
entity
.
getClass
().
getSimpleName
(),
deStorageMode
));-->
<#--}-->
<#--}-->
<#--/**-->
<#--*
为
NoSQL
存储模式的表格查询填充权限条件
-->
<#--*
@
param
searchContext
-->
<#--*
@
param
entity
-->
<#--*
@
param
dataSetName
-->
<#--*
@
param
permissionList
-->
<#--*/-->
<#--
private
void
noSqlPermissionBuilder
(
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
)
{-->
<#--
if
(
searchContext
instanceof
QueryBuildContext
){-->
<#--//
获取权限表达式
[
全部数据、本单位、本部门等
]-->
<#--
String
entityName
=
entity
.
getClass
().
getSimpleName
();-->
<#--
JSONObject
entityObj
=
permissionList
.
getJSONObject
(
entityName
);-->
<#--
JSONObject
permissionType
=
entityObj
.
getJSONObject
(
DataSetTag
);-->
<#--
JSONArray
dataRange
=
permissionType
.
getJSONArray
(
dataSetName
);-->
<#--
if
(
dataRange
.
size
()==
0
)-->
<#--
return
;-->
<#--//
根据权限表达式生成查询条件,并将查询条件设置到
SearchContext
中
-->
<#--
fillNoSqlPermissionCond
(
dataRange
,
entity
,((
QueryBuildContext
)
searchContext
).
getSelectCond
());-->
<#--}-->
<#--}-->
<#--/**-->
<#--*
为
SQL
存储模式的表格查询填充权限条件
-->
<#--*
@
param
searchContext
-->
<#--*
@
param
entity
-->
<#--*
@
param
dataSetName
-->
<#--*
@
param
permissionList
-->
<#--*/-->
<#--
private
void
sqlPermissionBuilder
(
Object
searchContext
,
EntityBase
entity
,
String
dataSetName
,
JSONObject
permissionList
){-->
<#--//
获取权限表达式
[
全部数据、本单位、本部门等
]-->
<#--
String
entityName
=
entity
.
getClass
().
getSimpleName
();-->
<#--
JSONObject
entityObj
=
permissionList
.
getJSONObject
(
entityName
);//
获取实体
-->
<#--
JSONObject
permissionType
=
entityObj
.
getJSONObject
(
DataSetTag
);-->
<#--
JSONArray
dataRange
=
permissionType
.
getJSONArray
(
dataSetName
);//
获取实体数据集
-->
<#--
if
(
dataRange
.
size
()==
0
)-->
<#--
return
;-->
<#--//
根据权限条件获取
SQL
-->
<#--
String
permissionSQL
=
getPermissionSQL
(
entity
,
dataRange
);-->
<#--//
将
SQL
拼接到
SearchContext
中
-->
<#--
if
(
searchContext
instanceof
QueryWrapperContext
){-->
<#--
QueryWrapperContext
queryWrapperContext
=
(
QueryWrapperContext
)
searchContext
;-->
<#--
QueryWrapper
queryWrapper
=
queryWrapperContext
.
getSelectCond
();-->
<#--
queryWrapper
.
apply
(
permissionSQL
);-->
<#--}-->
<#--}-->
/**
*
为
NoSQL
存储模式的表格查询填充权限条件
...
...
编辑
预览
Markdown
格式
0%
请重试
or
添加新附件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录