From 25b43dc0b03c4788128da323dba7d9bd1f573ca5 Mon Sep 17 00:00:00 2001 From: Sagilio Date: Wed, 23 Jun 2021 04:13:34 +0800 Subject: [PATCH] feat: Add lazyLoadPolicy option on enforcer constructor Signed-off-by: Sagilio --- NetCasbin.UnitTest/ModelTests/EnforcerTest.cs | 19 +++++++++++++++++++ NetCasbin/DefaultEnforcer.cs | 16 ++++++++-------- NetCasbin/Enforcer.cs | 15 +++++++++------ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/NetCasbin.UnitTest/ModelTests/EnforcerTest.cs b/NetCasbin.UnitTest/ModelTests/EnforcerTest.cs index 08ba04f8..fa048716 100644 --- a/NetCasbin.UnitTest/ModelTests/EnforcerTest.cs +++ b/NetCasbin.UnitTest/ModelTests/EnforcerTest.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading.Tasks; using Casbin.Adapter.File; using Casbin.Extensions; @@ -950,5 +951,23 @@ public void TestEnforceWithMultipleEval() Assert.True(result); } + + [Fact] + public void TestEnforceWithLazyLoadPolicy() + { + IModel m = DefaultModel.Create(); + m.AddDef("r", "r", "sub, obj, act"); + m.AddDef("p", "p", "sub, obj, act"); + m.AddDef("e", "e", "some(where (p.eft == allow))"); + m.AddDef("m", "m", "r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)"); + + IAdapter a = new FileAdapter("examples/keymatch_policy.csv"); + + IEnforcer e = DefaultEnforcer.Create(m, a, true); + Assert.Empty(e.GetPolicy()); + + e = DefaultEnforcer.Create(m, a); + Assert.NotEmpty(e.GetPolicy()); + } } } diff --git a/NetCasbin/DefaultEnforcer.cs b/NetCasbin/DefaultEnforcer.cs index 238d8cdf..da755bb3 100644 --- a/NetCasbin/DefaultEnforcer.cs +++ b/NetCasbin/DefaultEnforcer.cs @@ -5,24 +5,24 @@ namespace Casbin { public static class DefaultEnforcer { - public static IEnforcer Create(IAdapter adapter = null) + public static IEnforcer Create(IAdapter adapter = null, bool lazyLoadPolicy = false) { - return new Enforcer(DefaultModel.Create(), adapter); + return new Enforcer(DefaultModel.Create(), adapter, lazyLoadPolicy); } - public static IEnforcer Create(string modelPath, string policyPath) + public static IEnforcer Create(string modelPath, string policyPath, bool lazyLoadPolicy = false) { - return new Enforcer(modelPath, policyPath); + return new Enforcer(modelPath, policyPath, lazyLoadPolicy); } - public static IEnforcer Create(string modelPath, IAdapter adapter = null) + public static IEnforcer Create(string modelPath, IAdapter adapter = null, bool lazyLoadPolicy = false) { - return new Enforcer(modelPath, adapter); + return new Enforcer(modelPath, adapter, lazyLoadPolicy); } - public static IEnforcer Create(IModel model, IAdapter adapter = null) + public static IEnforcer Create(IModel model, IAdapter adapter = null, bool lazyLoadPolicy = false) { - return new Enforcer(model, adapter); + return new Enforcer(model, adapter, lazyLoadPolicy); } } } diff --git a/NetCasbin/Enforcer.cs b/NetCasbin/Enforcer.cs index 4793deb7..c31dbc5a 100644 --- a/NetCasbin/Enforcer.cs +++ b/NetCasbin/Enforcer.cs @@ -23,24 +23,27 @@ public Enforcer() { } - public Enforcer(string modelPath, string policyPath) - : this(modelPath, new FileAdapter(policyPath)) + public Enforcer(string modelPath, string policyPath, bool lazyLoadPolicy = false) + : this(modelPath, new FileAdapter(policyPath), lazyLoadPolicy) { } - public Enforcer(string modelPath, IAdapter adapter = null) - : this(DefaultModel.CreateFromFile(modelPath), adapter) + public Enforcer(string modelPath, IAdapter adapter = null, bool lazyLoadPolicy = false) + : this(DefaultModel.CreateFromFile(modelPath), adapter, lazyLoadPolicy) { } - public Enforcer(IModel model, IAdapter adapter = null) + public Enforcer(IModel model, IAdapter adapter = null, bool lazyLoadPolicy = false) { this.SetModel(model); if (adapter is not null) { this.SetAdapter(adapter); } - this.LoadPolicy(); + if (lazyLoadPolicy is false) + { + this.LoadPolicy(); + } } #region Options