Skip to content

Commit efaccc6

Browse files
committed
feat: update Casbin.NET to v2.7.0 and keep compatible with unexpected policy
Signed-off-by: sagilio <[email protected]>
1 parent 85e4fdb commit efaccc6

File tree

4 files changed

+92
-21
lines changed

4 files changed

+92
-21
lines changed

Casbin.Persist.Adapter.EFCore.UnitTest/Casbin.Persist.Adapter.EFCore.UnitTest.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup>
44
<TargetFrameworks>net8.0;net7.0;net6.0;net5.0;netcoreapp3.1;</TargetFrameworks>
55
<IsPackable>false</IsPackable>
6+
<LangVersion>11</LangVersion>
67
</PropertyGroup>
78

89
<ItemGroup>
Lines changed: 87 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
using Casbin.Persist.Adapter.EFCore.UnitTest.Extensions;
22
using Casbin.Model;
3+
using Casbin.Persist.Adapter.EFCore.Entities;
34
using Casbin.Persist.Adapter.EFCore.UnitTest.Fixtures;
45
using Xunit;
56

67
namespace Casbin.Persist.Adapter.EFCore.UnitTest
78
{
8-
public class SpecialPolicyTest : IClassFixture<ModelProvideFixture>, IClassFixture<DbContextProviderFixture>
9+
public class SpecialPolicyTest : TestUtil, IClassFixture<ModelProvideFixture>,
10+
IClassFixture<DbContextProviderFixture>
911
{
1012
private readonly ModelProvideFixture _modelProvideFixture;
1113
private readonly DbContextProviderFixture _dbContextProviderFixture;
1214

13-
public SpecialPolicyTest(ModelProvideFixture modelProvideFixture, DbContextProviderFixture dbContextProviderFixture)
15+
public SpecialPolicyTest(ModelProvideFixture modelProvideFixture,
16+
DbContextProviderFixture dbContextProviderFixture)
1417
{
1518
_modelProvideFixture = modelProvideFixture;
1619
_dbContextProviderFixture = dbContextProviderFixture;
@@ -22,33 +25,98 @@ public void TestCommaPolicy()
2225
var context = _dbContextProviderFixture.GetContext<int>("CommaPolicy");
2326
context.Clear();
2427
var adapter = new EFCoreAdapter<int>(context);
25-
var enforcer = new Enforcer(DefaultModel.CreateFromText(@"
26-
[request_definition]
27-
r = _
28+
var enforcer = new Enforcer(DefaultModel.CreateFromText(
29+
"""
30+
[request_definition]
31+
r = _
32+
33+
[policy_definition]
34+
p = rule, a1, a2
35+
36+
[policy_effect]
37+
e = some(where (p.eft == allow))
38+
39+
[matchers]
40+
m = eval(p.rule)
41+
"""
42+
), adapter);
43+
enforcer.AddFunction("equal", (a1, a2) => a1 == a2);
2844

29-
[policy_definition]
30-
p = rule, a1, a2
31-
32-
[policy_effect]
33-
e = some(where (p.eft == allow))
34-
35-
[matchers]
36-
m = eval(p.rule)
37-
"), adapter);
38-
enforcer.AddFunction("equal", (a1 , a2) => a1 == a2);
39-
4045
enforcer.AddPolicy("equal(p.a1, p.a2)", "a1", "a1");
4146
Assert.True(enforcer.Enforce("_"));
42-
47+
4348
enforcer.LoadPolicy();
4449
Assert.True(enforcer.Enforce("_"));
45-
50+
4651
enforcer.RemovePolicy("equal(p.a1, p.a2)", "a1", "a1");
4752
enforcer.AddPolicy("equal(p.a1, p.a2)", "a1", "a2");
4853
Assert.False(enforcer.Enforce("_"));
49-
54+
5055
enforcer.LoadPolicy();
5156
Assert.False(enforcer.Enforce("_"));
5257
}
58+
59+
[Fact]
60+
public void TestUnexpectedPolicy()
61+
{
62+
var context = _dbContextProviderFixture.GetContext<int>("UnexpectedPolicy");
63+
context.Clear();
64+
context.Policies.Add(new EFCorePersistPolicy<int>()
65+
{
66+
Type = "p",
67+
Value1 = "a1",
68+
Value2 = "a2",
69+
Value3 = null,
70+
});
71+
context.Policies.Add(new EFCorePersistPolicy<int>()
72+
{
73+
Type = "p",
74+
Value1 = "a1",
75+
Value2 = "a2",
76+
Value3 = "a3",
77+
});
78+
context.Policies.Add(new EFCorePersistPolicy<int>()
79+
{
80+
Type = "p",
81+
Value1 = "a1",
82+
Value2 = "a2",
83+
Value3 = "a3",
84+
Value4 = "a4",
85+
});
86+
context.Policies.Add(new EFCorePersistPolicy<int>()
87+
{
88+
Type = "p",
89+
Value1 = "b1",
90+
Value2 = "b2",
91+
Value3 = "b3",
92+
Value4 = "b4",
93+
});
94+
context.SaveChanges();
95+
96+
var adapter = new EFCoreAdapter<int>(context);
97+
var enforcer = new Enforcer(DefaultModel.CreateFromText(
98+
"""
99+
[request_definition]
100+
r = _
101+
102+
[policy_definition]
103+
p = a1, a2, a3
104+
105+
[policy_effect]
106+
e = some(where (p.eft == allow))
107+
108+
[matchers]
109+
m = true
110+
"""), adapter);
111+
112+
enforcer.LoadPolicy();
113+
var policies = enforcer.GetPolicy();
114+
115+
TestGetPolicy(enforcer, AsList(
116+
AsList("a1", "a2", ""),
117+
AsList("a1", "a2", "a3"),
118+
AsList("b1", "b2", "b3")
119+
));
120+
}
53121
}
54122
}

Casbin.Persist.Adapter.EFCore/Casbin.Persist.Adapter.EFCore.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
</PropertyGroup>
1818

1919
<ItemGroup>
20-
<PackageReference Include="Casbin.NET" Version="2.5.1" />
20+
<PackageReference Include="Casbin.NET" Version="2.7.0" />
2121
</ItemGroup>
2222

2323
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">

Casbin.Persist.Adapter.EFCore/Extensions/PolicyStoreExtension.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ internal static void LoadPolicyFromPersistPolicy<TPersistPolicy>(this IPolicySto
1414
{
1515
policy.Section = policy.Type.Substring(0, 1);
1616
}
17-
store.AddPolicy(policy.Section, policy.Type, Policy.ValuesFrom(policy));
17+
var requiredCount = store.GetRequiredValuesCount(policy.Section, policy.Type);
18+
var values = Policy.ValuesFrom(policy, requiredCount);
19+
store.AddPolicy(policy.Section, policy.Type, values);
1820
}
1921
}
2022

0 commit comments

Comments
 (0)