Skip to content

Commit

Permalink
feat: Remove unused effect chain
Browse files Browse the repository at this point in the history
Signed-off-by: sagilio <sagilio@outlook.com>
  • Loading branch information
sagilio committed Sep 18, 2022
1 parent 5ca9a37 commit f1b85bf
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 31 deletions.
10 changes: 3 additions & 7 deletions Casbin/Abstractions/Effect/IChainEffector.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
namespace Casbin.Effect
{
public interface IChainEffector : IChainEffector<EffectChain>
internal interface IChainEffector
{
}

public interface IChainEffector<out TChain> 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);
}
}
2 changes: 1 addition & 1 deletion Casbin/Abstractions/Persist/IWatcherEx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ Task UpdateForRemoveFilteredPolicyAsync(string section, string policyType, int f
/// <summary>
/// UpdateForSavePolicy calls the update callback of other instances to synchronize their policy.
/// It is called after Enforcer.RemoveFilteredNamedGroupingPolicy()
/// </summary
/// </summary>
void UpdateForSavePolicy();

/// <summary>
Expand Down
8 changes: 5 additions & 3 deletions Casbin/Effect/EffectChain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Casbin.Effect
{
public struct EffectChain : IEffectChain
public ref struct EffectChain
{
public EffectChain(string effectExpression)
{
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -82,6 +82,7 @@ public bool TryChain(PolicyEffect effect)
{
HitPolicyCount++;
}

return true;
}

Expand All @@ -91,6 +92,7 @@ public bool TryChain(PolicyEffect effect)
{
HitPolicyCount++;
}

return true;
}

Expand Down
36 changes: 17 additions & 19 deletions Casbin/Enforcer.Internal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ private bool InternalEnforce<TRequest, TPolicy>(in EnforceContext context, in TR
IExpressionHandler expressionHandler = Model.ExpressionHandler;
PolicyScanner<TRequest> scanner = context.View.PolicyAssertion.Scan(in requestValues);

EffectChain effectChain = default;
if (Effector is IChainEffector<EffectChain> effector)
EffectChain effectChain = new();
if (Effector is IChainEffector effector)
{
session.IsChainEffector = true;
effectChain = effector.CreateChain(context.View.Effect, context.View.EffectExpressionType);
Expand All @@ -88,18 +88,17 @@ private bool InternalEnforce<TRequest, TPolicy>(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)
Expand All @@ -114,17 +113,17 @@ private bool InternalEnforce<TRequest, TPolicy>(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);
}
}

Expand All @@ -150,12 +149,11 @@ private static void HandleInitialRequest<TRequest>(
}
}

private static void HandleBeforeExpression<TRequest, TPolicy, TChain>(
in EnforceContext context, ref EnforceSession session,
in TRequest request, scoped in TPolicy policy, scoped ref TChain effectChain)
private static void HandleBeforeExpression<TRequest, TPolicy>(
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;

Expand Down Expand Up @@ -209,8 +207,8 @@ private static void HandleBeforeExpression<TRequest, TPolicy, TChain>(
}

private static void HandleExpressionResult<TRequest, TPolicy>(
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
{
Expand Down Expand Up @@ -256,12 +254,11 @@ private static void HandleExpressionResult<TRequest, TPolicy>(
session.EnforceResult = false;
}

private static void HandleExpressionResult<TRequest, TPolicy, TChain>(
in EnforceContext context, ref EnforceSession session,
in TRequest request, scoped in TPolicy policy, scoped ref TChain effectChain)
private static void HandleExpressionResult<TRequest, TPolicy>(
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)
Expand Down Expand Up @@ -331,6 +328,7 @@ private static string RewriteInOperator(in EnforceContext context, string expres
{
return expressionString;
}

expressionString = StringUtil.ReplaceInOperator(expressionString);
return expressionString;
}
Expand Down
2 changes: 1 addition & 1 deletion Casbin/Model/Holder/EffectorHolder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit f1b85bf

Please sign in to comment.