This is an automated email from the ASF dual-hosted git repository.

hsluoyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/casbin-Casbin.NET.git


The following commit(s) were added to refs/heads/master by this push:
     new 70f54fe  fix: allow enforcer with only non-default policy effect types
70f54fe is described below

commit 70f54fea484abdc48ba39142d4786f880f2d664c
Author: Yang Luo <[email protected]>
AuthorDate: Mon Nov 2 00:31:16 2026 +0800

    fix: allow enforcer with only non-default policy effect types
---
 Casbin.UnitTests/ModelTests/ModelTest.cs  | 29 +++++++++++++++++++++++++++++
 Casbin/Extensions/Model/ModelExtension.cs | 10 +++++++---
 2 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/Casbin.UnitTests/ModelTests/ModelTest.cs 
b/Casbin.UnitTests/ModelTests/ModelTest.cs
index 67b9a0a..343ae14 100644
--- a/Casbin.UnitTests/ModelTests/ModelTest.cs
+++ b/Casbin.UnitTests/ModelTests/ModelTest.cs
@@ -603,6 +603,35 @@ public partial class ModelTest
         Assert.False(e.Enforce(context, new { Age = 70 }, "data2", "read"));
     }
 
+    [Fact]
+    public void TestOnlyNonDefaultTypeModel()
+    {
+        IModel model = DefaultModel.Create();
+        model.AddDef("r", "r2", "sub, obj, act");
+        model.AddDef("p", "p2", "sub, obj, act");
+        model.AddDef("g", "g", "_, _");
+        model.AddDef("e", "e2", "some(where (p.eft == allow))");
+        model.AddDef("m", "m2", "g(r2.sub, p2.sub) && r2.obj == p2.obj && 
r2.act == p2.act");
+
+        Enforcer e = new(model);
+        e.AddNamedPolicy(PermConstants.PolicyType2, "alice", "data1", "read");
+        e.AddNamedPolicy(PermConstants.PolicyType2, "bob", "data2", "write");
+        e.BuildRoleLinks();
+
+        EnforceContext context = e.CreateContext
+        (
+            PermConstants.RequestType2,
+            PermConstants.PolicyType2,
+            PermConstants.PolicyEffectType2,
+            PermConstants.MatcherType2
+        );
+
+        Assert.True(e.Enforce(context, "alice", "data1", "read"));
+        Assert.False(e.Enforce(context, "alice", "data1", "write"));
+        Assert.True(e.Enforce(context, "bob", "data2", "write"));
+        Assert.False(e.Enforce(context, "bob", "data2", "read"));
+    }
+
     [Fact]
     public void TestAbacComment()
     {
diff --git a/Casbin/Extensions/Model/ModelExtension.cs 
b/Casbin/Extensions/Model/ModelExtension.cs
index b2ee445..65d43db 100644
--- a/Casbin/Extensions/Model/ModelExtension.cs
+++ b/Casbin/Extensions/Model/ModelExtension.cs
@@ -12,9 +12,13 @@ namespace Casbin.Model
     {
         public static bool SortPolicy(this IModel model)
         {
-            string value = 
model.Sections.GetValue(PermConstants.Section.PolicyEffectSection,
-                PermConstants.DefaultPolicyEffectType);
-            switch (value)
+            if 
(model.Sections.TryGetAssertion(PermConstants.Section.PolicyEffectSection,
+                    PermConstants.DefaultPolicyEffectType, out 
PolicyEffectAssertion assertion) is false)
+            {
+                return false;
+            }
+
+            switch (assertion.Value)
             {
                 case PermConstants.PolicyEffect.Priority:
                 case PermConstants.PolicyEffect.PriorityDenyOverride:


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to