From 91904e99833e5c1050f25a227c4adeb705114b43 Mon Sep 17 00:00:00 2001 From: Taoyuesong <45005220+Taoyuesong@users.noreply.github.com> Date: Mon, 12 Aug 2024 00:09:13 +0800 Subject: [PATCH] fix: Interrupt policy scanner at final block (#362) Signed-off-by: Taoyuesong <634774653@qq.com> --- Casbin/Enforcer.Internal.cs | 53 +++++++++++++++++++++---------------- global.json | 4 +-- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/Casbin/Enforcer.Internal.cs b/Casbin/Enforcer.Internal.cs index 6114b0e..fee0427 100644 --- a/Casbin/Enforcer.Internal.cs +++ b/Casbin/Enforcer.Internal.cs @@ -82,32 +82,39 @@ private bool InternalEnforce(in EnforceContext context, in TR if (context.View.HasPolicyParameter && session.HasNextPolicy) { - int policyIndex = 0; - while (scanner.GetNext(out IPolicyValues outValues)) + try { - TPolicy policyValues = (TPolicy)outValues; - session.PolicyIndex = policyIndex; - - HandleBeforeExpression(in context, ref session, in effectChain, in requestValues, policyValues); - session.ExpressionResult = expressionHandler.Invoke(in context, session.ExpressionString, - in requestValues, in policyValues); - - if (session.IsChainEffector) - { - HandleExpressionResult(in context, ref session, ref effectChain, in requestValues, policyValues); - } - else - { - HandleExpressionResult(in context, ref session, Effector, in requestValues, policyValues); - } - - if (session.Determined) + int policyIndex = 0; + while (scanner.GetNext(out IPolicyValues outValues)) { - scanner.Interrupt(); - break; + TPolicy policyValues = (TPolicy)outValues; + session.PolicyIndex = policyIndex; + + HandleBeforeExpression(in context, ref session, in effectChain, in requestValues, policyValues); + session.ExpressionResult = expressionHandler.Invoke(in context, session.ExpressionString, + in requestValues, in policyValues); + + if (session.IsChainEffector) + { + HandleExpressionResult(in context, ref session, ref effectChain, in requestValues, policyValues); + } + else + { + HandleExpressionResult(in context, ref session, Effector, in requestValues, policyValues); + } + + if (session.Determined) + { + scanner.Interrupt(); + break; + } + + policyIndex++; } - - policyIndex++; + } + finally + { + scanner.Interrupt(); } } else diff --git a/global.json b/global.json index 7cd6a1f..6d77f62 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,7 @@ { "sdk": { - "version": "7.0.0", + "version": "9.0.0", "rollForward": "latestMajor", "allowPrerelease": true } -} \ No newline at end of file +}