Skip to content

Commit 5cb8846

Browse files
authored
fix: fix no enforceExplain in eft.Deny (casbin#338)
1 parent 00a5942 commit 5cb8846

File tree

4 files changed

+22
-4
lines changed

4 files changed

+22
-4
lines changed

src/main/java/org/casbin/jcasbin/effect/DefaultStreamEffector.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ public class DefaultStreamEffector implements StreamEffector {
1818
private final String expr;
1919
private boolean done = false;
2020
private boolean effect = false;
21+
private int explainIndex = -1;
2122

2223
public DefaultStreamEffector(String expr) {
2324
this.expr = expr;
2425
}
2526

2627
@Override
2728
public StreamEffectorResult current() {
28-
return new DefaultStreamEffectorResult(effect, done);
29+
return new DefaultStreamEffectorResult(effect, done, explainIndex);
2930
}
3031

3132
@Override
@@ -34,28 +35,33 @@ public boolean push(Effect eft, int currentIndex, int policySize) {
3435
case "some(where (p_eft == allow))":
3536
if (eft == Effect.Allow) {
3637
this.effect = true;
38+
explainIndex = currentIndex;
3739
this.done = true;
3840
}
3941
break;
4042
case "!some(where (p_eft == deny))":
4143
this.effect = true;
4244
if (eft == Effect.Deny) {
4345
this.effect = false;
46+
explainIndex = currentIndex;
4447
this.done = true;
4548
}
4649
break;
4750
case "some(where (p_eft == allow)) && !some(where (p_eft == deny))":
4851
if (eft == Effect.Allow) {
4952
this.effect = true;
53+
explainIndex = explainIndex == -1 ? currentIndex : explainIndex;
5054
} else if (eft == Effect.Deny) {
5155
this.effect = false;
56+
explainIndex = currentIndex;
5257
this.done = true;
5358
}
5459
break;
5560
case "priority(p_eft) || deny":
5661
case "subjectPriority(p_eft) || deny":
5762
if (eft != Effect.Indeterminate) {
5863
this.effect = eft == Effect.Allow;
64+
explainIndex = currentIndex;
5965
this.done = true;
6066
}
6167
break;

src/main/java/org/casbin/jcasbin/effect/DefaultStreamEffectorResult.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,23 @@
1717
public class DefaultStreamEffectorResult implements StreamEffectorResult {
1818
private boolean done;
1919
private boolean effect;
20-
20+
private int explainIndex;
2121
public DefaultStreamEffectorResult(){
2222

2323
}
2424

25-
public DefaultStreamEffectorResult(boolean effect, boolean done) {
25+
public DefaultStreamEffectorResult(boolean effect, boolean done, int explainIndex) {
2626
this.effect = effect;
2727
this.done = done;
28+
this.explainIndex = explainIndex;
2829
}
2930

3031
@Override
3132
public boolean hasEffect() {
3233
return effect;
3334
}
3435

36+
@Override
3537
public boolean isDone() {
3638
return done;
3739
}
@@ -43,4 +45,13 @@ public void setEffect(boolean effect) {
4345
public void setDone(boolean done) {
4446
this.done = done;
4547
}
48+
49+
@Override
50+
public int getExplainIndex() {
51+
return explainIndex;
52+
}
53+
54+
public void setExplainIndex(int explainIndex) {
55+
this.explainIndex = explainIndex;
56+
}
4657
}

src/main/java/org/casbin/jcasbin/effect/StreamEffectorResult.java

+1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,5 @@
1717
public interface StreamEffectorResult {
1818
boolean hasEffect();
1919
boolean isDone();
20+
int getExplainIndex();
2021
}

src/main/java/org/casbin/jcasbin/main/CoreEnforcer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,6 @@ private EnforceResult enforce(String matcher, Object... rvals) {
562562
if (streamEffector != null) {
563563
boolean done = streamEffector.push(policyEffects[i], i, policyLen);
564564
if (done) {
565-
explainIndex = i;
566565
break;
567566
}
568567
} else {
@@ -571,6 +570,7 @@ private EnforceResult enforce(String matcher, Object... rvals) {
571570
}
572571
}
573572
}
573+
explainIndex = streamEffector.current().getExplainIndex();
574574
} else {
575575
policyEffects = new Effect[1];
576576
matcherResults = new float[1];

0 commit comments

Comments
 (0)