From f1b85bfcbafb3c255b5b7fe13a55ed5f0be76877 Mon Sep 17 00:00:00 2001 From: sagilio Date: Mon, 19 Sep 2022 01:11:51 +0800 Subject: [PATCH] feat: Remove unused effect chain Signed-off-by: sagilio --- Casbin/Abstractions/Effect/IChainEffector.cs | 10 ++---- Casbin/Abstractions/Persist/IWatcherEx.cs | 2 +- Casbin/Effect/EffectChain.cs | 8 +++-- Casbin/Enforcer.Internal.cs | 36 +++++++++----------- Casbin/Model/Holder/EffectorHolder.cs | 2 +- 5 files changed, 27 insertions(+), 31 deletions(-) diff --git a/Casbin/Abstractions/Effect/IChainEffector.cs b/Casbin/Abstractions/Effect/IChainEffector.cs index 1ef54fb2..956da2cf 100644 --- a/Casbin/Abstractions/Effect/IChainEffector.cs +++ b/Casbin/Abstractions/Effect/IChainEffector.cs @@ -1,13 +1,9 @@ namespace Casbin.Effect { - public interface IChainEffector : IChainEffector + internal interface IChainEffector { - } - - public interface IChainEffector where TChain : IEffectChain - { - public TChain CreateChain(string policyEffect); + public EffectChain CreateChain(string policyEffect); - public TChain CreateChain(string policyEffect, EffectExpressionType effectExpressionType); + public EffectChain CreateChain(string policyEffect, EffectExpressionType effectExpressionType); } } diff --git a/Casbin/Abstractions/Persist/IWatcherEx.cs b/Casbin/Abstractions/Persist/IWatcherEx.cs index 7eac3ba7..1af7ceaa 100644 --- a/Casbin/Abstractions/Persist/IWatcherEx.cs +++ b/Casbin/Abstractions/Persist/IWatcherEx.cs @@ -71,7 +71,7 @@ Task UpdateForRemoveFilteredPolicyAsync(string section, string policyType, int f /// /// UpdateForSavePolicy calls the update callback of other instances to synchronize their policy. /// It is called after Enforcer.RemoveFilteredNamedGroupingPolicy() - /// void UpdateForSavePolicy(); /// diff --git a/Casbin/Effect/EffectChain.cs b/Casbin/Effect/EffectChain.cs index b529d905..0886b2c1 100644 --- a/Casbin/Effect/EffectChain.cs +++ b/Casbin/Effect/EffectChain.cs @@ -3,7 +3,7 @@ namespace Casbin.Effect { - public struct EffectChain : IEffectChain + public ref struct EffectChain { public EffectChain(string effectExpression) { @@ -51,7 +51,7 @@ public bool Chain(PolicyEffect effect) bool result = Result; if (EffectEvaluator.TryEvaluate(effect, EffectExpressionType, - ref result, out bool hitPolicy)) + ref result, out bool hitPolicy)) { CanChain = false; Result = result; @@ -73,7 +73,7 @@ public bool TryChain(PolicyEffect effect) bool result = Result; if (EffectEvaluator.TryEvaluate(effect, EffectExpressionType, - ref result, out bool hitPolicy)) + ref result, out bool hitPolicy)) { CanChain = false; Result = result; @@ -82,6 +82,7 @@ public bool TryChain(PolicyEffect effect) { HitPolicyCount++; } + return true; } @@ -91,6 +92,7 @@ public bool TryChain(PolicyEffect effect) { HitPolicyCount++; } + return true; } diff --git a/Casbin/Enforcer.Internal.cs b/Casbin/Enforcer.Internal.cs index 5dc0d641..e498ccd0 100644 --- a/Casbin/Enforcer.Internal.cs +++ b/Casbin/Enforcer.Internal.cs @@ -70,8 +70,8 @@ private bool InternalEnforce(in EnforceContext context, in TR IExpressionHandler expressionHandler = Model.ExpressionHandler; PolicyScanner scanner = context.View.PolicyAssertion.Scan(in requestValues); - EffectChain effectChain = default; - if (Effector is IChainEffector effector) + EffectChain effectChain = new(); + if (Effector is IChainEffector effector) { session.IsChainEffector = true; effectChain = effector.CreateChain(context.View.Effect, context.View.EffectExpressionType); @@ -88,18 +88,17 @@ private bool InternalEnforce(in EnforceContext context, in TR TPolicy policyValues = (TPolicy)outValues; session.PolicyIndex = policyIndex; - HandleBeforeExpression(in context, ref session, in requestValues, in policyValues, ref effectChain); + 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, in requestValues, in policyValues, - ref effectChain); + HandleExpressionResult(in context, ref session, ref effectChain, in requestValues, policyValues); } else { - HandleExpressionResult(in context, ref session, in requestValues, in policyValues, Effector); + HandleExpressionResult(in context, ref session, Effector, in requestValues, policyValues); } if (session.Determined) @@ -114,17 +113,17 @@ private bool InternalEnforce(in EnforceContext context, in TR else { StringPolicyValues policyValues = StringPolicyValues.Empty; - HandleBeforeExpression(in context, ref session, in requestValues, in policyValues, ref effectChain); + 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, in requestValues, in policyValues, ref effectChain); + HandleExpressionResult(in context, ref session, ref effectChain, in requestValues, policyValues); } else { - HandleExpressionResult(in context, ref session, in requestValues, in policyValues, Effector); + HandleExpressionResult(in context, ref session, Effector, in requestValues, policyValues); } } @@ -150,12 +149,11 @@ private static void HandleInitialRequest( } } - private static void HandleBeforeExpression( - in EnforceContext context, ref EnforceSession session, - in TRequest request, scoped in TPolicy policy, scoped ref TChain effectChain) + private static void HandleBeforeExpression( + in EnforceContext context, ref EnforceSession session, in EffectChain effectChain, + in TRequest request, scoped in TPolicy policy) where TRequest : IRequestValues where TPolicy : IPolicyValues - where TChain : IEffectChain { int policyTokenCount = context.View.PolicyAssertion.Tokens.Count; @@ -209,8 +207,8 @@ private static void HandleBeforeExpression( } private static void HandleExpressionResult( - in EnforceContext context, ref EnforceSession session, - in TRequest request, scoped in TPolicy policy, IEffector effector) + in EnforceContext context, ref EnforceSession session, IEffector effector, + in TRequest request, scoped in TPolicy policy) where TRequest : IRequestValues where TPolicy : IPolicyValues { @@ -256,12 +254,11 @@ private static void HandleExpressionResult( session.EnforceResult = false; } - private static void HandleExpressionResult( - in EnforceContext context, ref EnforceSession session, - in TRequest request, scoped in TPolicy policy, scoped ref TChain effectChain) + private static void HandleExpressionResult( + in EnforceContext context, ref EnforceSession session, ref EffectChain effectChain, + in TRequest request, scoped in TPolicy policy) where TRequest : IRequestValues where TPolicy : IPolicyValues - where TChain : IEffectChain { PolicyEffect nowEffect; if (session.HasNextPolicy is false) @@ -331,6 +328,7 @@ private static string RewriteInOperator(in EnforceContext context, string expres { return expressionString; } + expressionString = StringUtil.ReplaceInOperator(expressionString); return expressionString; } diff --git a/Casbin/Model/Holder/EffectorHolder.cs b/Casbin/Model/Holder/EffectorHolder.cs index 06308be1..e00d9319 100644 --- a/Casbin/Model/Holder/EffectorHolder.cs +++ b/Casbin/Model/Holder/EffectorHolder.cs @@ -16,7 +16,7 @@ public IEffector Effector } } - public IChainEffector ChainEffector { get; private set; } + internal IChainEffector ChainEffector { get; private set; } private void DetermineEffector(IEffector effector) => ChainEffector = effector as IChainEffector; }