Skip to content

Commit 91904e9

Browse files
authored
fix: Interrupt policy scanner at final block (#362)
Signed-off-by: Taoyuesong <[email protected]>
1 parent 6863c41 commit 91904e9

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

Casbin/Enforcer.Internal.cs

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -82,32 +82,39 @@ private bool InternalEnforce<TRequest, TPolicy>(in EnforceContext context, in TR
8282

8383
if (context.View.HasPolicyParameter && session.HasNextPolicy)
8484
{
85-
int policyIndex = 0;
86-
while (scanner.GetNext(out IPolicyValues outValues))
85+
try
8786
{
88-
TPolicy policyValues = (TPolicy)outValues;
89-
session.PolicyIndex = policyIndex;
90-
91-
HandleBeforeExpression(in context, ref session, in effectChain, in requestValues, policyValues);
92-
session.ExpressionResult = expressionHandler.Invoke(in context, session.ExpressionString,
93-
in requestValues, in policyValues);
94-
95-
if (session.IsChainEffector)
96-
{
97-
HandleExpressionResult(in context, ref session, ref effectChain, in requestValues, policyValues);
98-
}
99-
else
100-
{
101-
HandleExpressionResult(in context, ref session, Effector, in requestValues, policyValues);
102-
}
103-
104-
if (session.Determined)
87+
int policyIndex = 0;
88+
while (scanner.GetNext(out IPolicyValues outValues))
10589
{
106-
scanner.Interrupt();
107-
break;
90+
TPolicy policyValues = (TPolicy)outValues;
91+
session.PolicyIndex = policyIndex;
92+
93+
HandleBeforeExpression(in context, ref session, in effectChain, in requestValues, policyValues);
94+
session.ExpressionResult = expressionHandler.Invoke(in context, session.ExpressionString,
95+
in requestValues, in policyValues);
96+
97+
if (session.IsChainEffector)
98+
{
99+
HandleExpressionResult(in context, ref session, ref effectChain, in requestValues, policyValues);
100+
}
101+
else
102+
{
103+
HandleExpressionResult(in context, ref session, Effector, in requestValues, policyValues);
104+
}
105+
106+
if (session.Determined)
107+
{
108+
scanner.Interrupt();
109+
break;
110+
}
111+
112+
policyIndex++;
108113
}
109-
110-
policyIndex++;
114+
}
115+
finally
116+
{
117+
scanner.Interrupt();
111118
}
112119
}
113120
else

global.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"sdk": {
3-
"version": "7.0.0",
3+
"version": "9.0.0",
44
"rollForward": "latestMajor",
55
"allowPrerelease": true
66
}
7-
}
7+
}

0 commit comments

Comments
 (0)