Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
街头小贩
Jforum2
提交
26d28b2f
J
Jforum2
项目概览
街头小贩
/
Jforum2
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
1
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
Jforum2
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
26d28b2f
编写于
8月 28, 2020
作者:
街头小贩
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加ConfigStrategyChain
上级
1da4cc0e
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
122 addition
and
9 deletion
+122
-9
core.security/src/main/java/com/apobates/forum/core/security/exposure/AbstractDetectionStrategy.java
...rum/core/security/exposure/AbstractDetectionStrategy.java
+2
-3
core.security/src/main/java/com/apobates/forum/core/security/exposure/DetectionStrategyChain.java
.../forum/core/security/exposure/DetectionStrategyChain.java
+5
-5
core.security/src/main/java/com/apobates/forum/core/security/exposure/config/AbstractConfigStrategy.java
...core/security/exposure/config/AbstractConfigStrategy.java
+12
-1
core.security/src/main/java/com/apobates/forum/core/security/exposure/config/ConfigStrategyChain.java
...um/core/security/exposure/config/ConfigStrategyChain.java
+103
-0
未找到文件。
core.security/src/main/java/com/apobates/forum/core/security/exposure/AbstractDetectionStrategy.java
浏览文件 @
26d28b2f
...
...
@@ -40,7 +40,7 @@ public abstract class AbstractDetectionStrategy<T> {
* @throws VerificaFailException
*/
public
ComplexDetectionStrategy
<
T
>
detect
(
T
entitiy
,
Member
member
,
ForumActionEnum
forumAction
,
Set
<
MemberRoleEnum
>
actionAllowRoles
)
throws
VerificaFailException
{
DetectionStrategyChain
<
T
>
dsc
=
DetectionStrategyChain
.<
T
>
begin
()
DetectionStrategyChain
<
T
>
dsc
=
DetectionStrategyChain
.<
T
>
start
()
.
entity
(
getEntityStrategy
(),
ImmutablePair
.
of
(
entitiy
,
forumAction
))
.
member
(
getMemberCondition
(),
member
)
.
action
(
getActionCondition
(),
ImmutableTriple
.
of
(
member
,
forumAction
,
actionAllowRoles
));
...
...
@@ -99,8 +99,7 @@ public abstract class AbstractDetectionStrategy<T> {
if
(
ForumActionEnum
.
POSTS_EDIT
==
action
)
{
// 作者和版主都可以
return
false
;
}
Set
<
ForumActionEnum
>
ma
=
ForumActionEnum
.
getModeratorActions
();
return
ma
.
contains
(
action
);
return
ForumActionEnum
.
getModeratorActions
().
contains
(
action
);
}
private
static
boolean
isContinueManagerAction
(
ForumActionEnum
action
,
MemberRoleEnum
memberRole
)
{
...
...
core.security/src/main/java/com/apobates/forum/core/security/exposure/DetectionStrategyChain.java
浏览文件 @
26d28b2f
...
...
@@ -15,7 +15,7 @@ import org.apache.commons.lang3.tuple.ImmutableTriple;
/**
* 检测器执行链,并封装执行结果
*
* @param <T>
* @param <T>
实体类型参数
* @author xiaofanku
* @since 20200805
*/
...
...
@@ -28,12 +28,12 @@ public final class DetectionStrategyChain<T> {
this
.
exception
=
exception
;
}
public
static
<
T
>
DetectionStrategyChain
<
T
>
begin
()
{
public
static
<
T
>
DetectionStrategyChain
<
T
>
start
()
{
return
new
DetectionStrategyChain
<>(
true
,
null
);
}
/**
*
* @param entityStrategy 实体
检查策略
* @param entityStrategy 实体
谓词函数
* @param argument 检查策略参数
* @return
*/
...
...
@@ -53,7 +53,7 @@ public final class DetectionStrategyChain<T> {
}
/**
*
* @param memberStrategy 操作者/会员检
查策略
* @param memberStrategy 操作者/会员检
谓词函数
* @param operator 操作者/会员
* @return
*/
...
...
@@ -73,7 +73,7 @@ public final class DetectionStrategyChain<T> {
}
/**
*
* @param actionStrategy 操作权限
检查策略
* @param actionStrategy 操作权限
谓词函数
* @param argument 检查策略参数
* @return
*/
...
...
core.security/src/main/java/com/apobates/forum/core/security/exposure/config/AbstractConfigStrategy.java
浏览文件 @
26d28b2f
...
...
@@ -7,6 +7,8 @@ import com.apobates.forum.member.entity.Member;
import
com.apobates.forum.utils.lang.TriPredicate
;
import
java.util.function.BiPredicate
;
import
java.util.function.Predicate
;
import
org.apache.commons.lang3.tuple.ImmutablePair
;
import
org.apache.commons.lang3.tuple.ImmutableTriple
;
/**
* 抽像的实现配置文件策略
...
...
@@ -51,6 +53,7 @@ public abstract class AbstractConfigStrategy<T, C> {
* @throws StrategyException
*/
public
ComplexConfigStrategyExector
<
T
,
C
>
initial
(
C
entityConfig
,
T
entity
,
StrategyMode
mode
,
Member
culpritor
)
throws
StrategyException
{
/* 这种写法有撒问题?
try{
boolean symbol = checkConfig().test(entityConfig) && checkEntity().test(entity, mode) && checkCulpritor().test(entityConfig, culpritor, mode);
if(symbol){
...
...
@@ -59,6 +62,14 @@ public abstract class AbstractConfigStrategy<T, C> {
}catch(StrategyException e){
throw e;
}
throw
new
StrategyException
(
"初步检测失败"
);
throw new StrategyException("初步检测失败");*/
ConfigStrategyChain
<
T
,
C
>
csc
=
ConfigStrategyChain
.<
T
,
C
>
start
()
.
config
(
checkConfig
(),
entityConfig
)
.
entity
(
checkEntity
(),
ImmutablePair
.
of
(
entity
,
mode
))
.
culpritor
(
checkCulpritor
(),
ImmutableTriple
.
of
(
entityConfig
,
culpritor
,
mode
));
if
(
csc
.
getBreakException
().
isPresent
()){
throw
csc
.
getBreakException
().
get
();
}
return
new
ComplexConfigStrategyExector
<>(
culpritor
,
entity
,
mode
,
entityConfig
);
}
}
\ No newline at end of file
core.security/src/main/java/com/apobates/forum/core/security/exposure/config/ConfigStrategyChain.java
0 → 100644
浏览文件 @
26d28b2f
package
com.apobates.forum.core.security.exposure.config
;
import
com.apobates.forum.core.security.exception.StrategyException
;
import
com.apobates.forum.core.security.exception.VerificaFailException
;
import
com.apobates.forum.core.security.exposure.DetectionStrategyChain
;
import
com.apobates.forum.core.security.strategy.StrategyMode
;
import
com.apobates.forum.member.entity.Member
;
import
com.apobates.forum.utils.lang.TriPredicate
;
import
java.util.Optional
;
import
java.util.function.BiPredicate
;
import
java.util.function.Predicate
;
import
org.apache.commons.lang3.tuple.ImmutablePair
;
import
org.apache.commons.lang3.tuple.ImmutableTriple
;
/**
* 配置文件策略执行链,并封装执行结果
*
* @param <T> 实体类型参数
* @param <C> 实体配置文件类型参数
* @author xiaofanku
* @since 20200828
*/
public
final
class
ConfigStrategyChain
<
T
,
C
>
{
private
final
boolean
result
;
private
final
StrategyException
exception
;
private
ConfigStrategyChain
(
boolean
result
,
StrategyException
exception
)
{
this
.
result
=
result
;
this
.
exception
=
exception
;
}
public
static
<
T
,
C
>
ConfigStrategyChain
<
T
,
C
>
start
()
{
return
new
ConfigStrategyChain
<>(
true
,
null
);
}
/**
*
* @param configFunction 配置文件谓词函数
* @param config 实体配置文件
* @return
*/
public
ConfigStrategyChain
<
T
,
C
>
config
(
Predicate
<
C
>
configFunction
,
C
config
){
if
(!
isContinue
()){
return
this
;
}
//
try
{
if
(
configFunction
.
test
(
config
)){
return
new
ConfigStrategyChain
<>(
true
,
null
);
}
}
catch
(
StrategyException
e
){
return
new
ConfigStrategyChain
<>(
false
,
e
);
}
return
new
ConfigStrategyChain
<>(
false
,
new
StrategyException
(
"实体配置文件检测失败"
));
}
/**
*
* @param entityFunction 实体谓词函数
* @param argument 实体谓词函数参数
* @return
*/
public
ConfigStrategyChain
<
T
,
C
>
entity
(
BiPredicate
<
T
,
StrategyMode
>
entityFunction
,
ImmutablePair
<
T
,
StrategyMode
>
argument
){
if
(!
isContinue
()){
return
this
;
}
//
try
{
if
(
entityFunction
.
test
(
argument
.
getLeft
(),
argument
.
getRight
())){
return
new
ConfigStrategyChain
<>(
true
,
null
);
}
}
catch
(
StrategyException
e
){
return
new
ConfigStrategyChain
<>(
false
,
e
);
}
return
new
ConfigStrategyChain
<>(
false
,
new
StrategyException
(
"实体检测失败"
));
}
/**
*
* @param culpritorFunction 操作者/会员检谓词函数
* @param argument 操作者/会员检谓词函数参数
* @return
*/
public
ConfigStrategyChain
<
T
,
C
>
culpritor
(
TriPredicate
<
C
,
Member
,
StrategyMode
>
culpritorFunction
,
ImmutableTriple
<
C
,
Member
,
StrategyMode
>
argument
){
if
(!
isContinue
()){
return
this
;
}
//
try
{
if
(
culpritorFunction
.
test
(
argument
.
getLeft
(),
argument
.
getMiddle
(),
argument
.
getRight
())){
return
new
ConfigStrategyChain
<>(
true
,
null
);
}
}
catch
(
StrategyException
e
){
return
new
ConfigStrategyChain
<>(
false
,
e
);
}
return
new
ConfigStrategyChain
<>(
false
,
new
StrategyException
(
"操作者检测失败"
));
}
public
boolean
isContinue
()
{
return
result
;
}
public
Optional
<
StrategyException
>
getBreakException
()
{
return
Optional
.
ofNullable
(
exception
);
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录