Skip to content

Commit 909cf1b

Browse files
committed
feat: add text adapter
Signed-off-by: Taoyuesong <tao634774653@gmail.com>
1 parent 5bfb0d3 commit 909cf1b

File tree

9 files changed

+490
-628
lines changed

9 files changed

+490
-628
lines changed

Casbin.UnitTests/ModelTests/EnforcerTest.cs

Lines changed: 26 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ public void TestEnforceSubjectPriority()
8585
TestModelFixture.SubjectPriorityModelText,
8686
TestModelFixture.SubjectPriorityPolicyText));
8787

88-
TestEnforce(e, "jane", "data1", "read", true);
89-
TestEnforce(e, "alice", "data1", "read", true);
88+
Assert.True(e.Enforce("jane", "data1", "read"));
89+
Assert.True(e.Enforce("alice", "data1", "read"));
9090
}
9191

9292
[Fact]
@@ -96,16 +96,8 @@ public void TestEnforceSubjectPriorityWithDomain()
9696
Path.Combine("Examples", "subject_priority_model_with_domain.conf"),
9797
Path.Combine("Examples", "subject_priority_policy_with_domain.csv"));
9898

99-
Assert.True(e.Enforce(
100-
"alice",
101-
"data1",
102-
"domain1",
103-
"write"));
104-
Assert.True(e.Enforce(
105-
"bob",
106-
"data2",
107-
"domain2",
108-
"write"));
99+
Assert.True(e.Enforce("alice", "data1", "domain1", "write"));
100+
Assert.True(e.Enforce("bob", "data2", "domain2", "write"));
109101
}
110102

111103
#region In memory model
@@ -701,6 +693,28 @@ public async Task TestInitEmptyAsync()
701693
await TestEnforceAsync(e, "alice", "/alice_data/resource1", "GET", true);
702694
}
703695

696+
[Fact]
697+
public void TestInitEmptyByInputStream()
698+
{
699+
Enforcer e = new();
700+
701+
IModel m = DefaultModel.Create();
702+
m.AddDef("r", "r", "sub, obj, act");
703+
m.AddDef("p", "p", "sub, obj, act");
704+
m.AddDef("e", "e", "some(where (p.eft == allow))");
705+
m.AddDef("m", "m", "r.sub == p.sub && keyMatch(r.obj, p.obj) && regexMatch(r.act, p.act)");
706+
707+
using (FileStream fs = new("Examples/keymatch_policy.csv", FileMode.Open, FileAccess.Read,
708+
FileShare.ReadWrite))
709+
{
710+
FileAdapter a = new(fs);
711+
e.SetModel(m);
712+
e.SetAdapter(a);
713+
e.LoadPolicy();
714+
715+
TestEnforce(e, "alice", "/alice_data/resource1", "GET", true);
716+
}
717+
}
704718

705719
[Fact]
706720
public async Task TestInitEmptyByInputStreamAsync()
@@ -1001,48 +1015,6 @@ public async Task TestGetAndSetAdapterInMemAsync()
10011015
await TestEnforceAsync(e, "alice", "data1", "write", true);
10021016
}
10031017

1004-
[Fact]
1005-
public void TestSetAdapterFromFile()
1006-
{
1007-
Enforcer e = new("Examples/basic_model.conf");
1008-
1009-
TestEnforce(e, "alice", "data1", "read", false);
1010-
1011-
FileAdapter a = new("Examples/basic_policy.csv");
1012-
e.SetAdapter(a);
1013-
e.LoadPolicy();
1014-
TestEnforce(e, "alice", "data1", "read", true);
1015-
e.ClearPolicy();
1016-
e.ClearCache();
1017-
1018-
var policyBytes = Encoding.UTF8.GetBytes(File.ReadAllText(TestModelFixture.GetTestFile("basic_policy.csv")));
1019-
StreamAdapter b = new(new MemoryStream(policyBytes, false), new MemoryStream(policyBytes, true));
1020-
e.SetAdapter(b);
1021-
e.LoadPolicy();
1022-
TestEnforce(e, "alice", "data1", "read", true);
1023-
}
1024-
1025-
[Fact]
1026-
public async Task TestSetAdapterFromFileAsync()
1027-
{
1028-
Enforcer e = new("Examples/basic_model.conf");
1029-
1030-
await TestEnforceAsync(e, "alice", "data1", "read", false);
1031-
1032-
FileAdapter a = new("Examples/basic_policy_for_async_adapter_test.csv");
1033-
e.SetAdapter(a);
1034-
await e.LoadPolicyAsync();
1035-
await TestEnforceAsync(e, "alice", "data1", "read", true);
1036-
e.ClearPolicy();
1037-
e.ClearCache();
1038-
1039-
var policyBytes = Encoding.UTF8.GetBytes(File.ReadAllText(TestModelFixture.GetTestFile("basic_policy.csv")));
1040-
StreamAdapter b = new(new MemoryStream(policyBytes, false), new MemoryStream(policyBytes, true));
1041-
e.SetAdapter(b);
1042-
await e.LoadPolicyAsync();
1043-
await TestEnforceAsync(e, "alice", "data1", "read", true);
1044-
}
1045-
10461018
[Fact]
10471019
public void TestEnforceExApi()
10481020
{
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System.IO;
2+
using Casbin.Persist.Adapter.File;
3+
using Casbin.Persist.Adapter.Stream;
4+
using Casbin.Persist.Adapter.Text;
5+
using Xunit;
6+
7+
namespace Casbin.UnitTests.PersistTests;
8+
9+
10+
public class AdapterTest
11+
{
12+
[Fact]
13+
public void TestFileAdapter()
14+
{
15+
Enforcer e = new("Examples/basic_model.conf");
16+
Assert.False(e.Enforce("alice", "data1", "read"));
17+
18+
FileAdapter a = new("Examples/basic_policy.csv");
19+
e.SetAdapter(a);
20+
e.LoadPolicy();
21+
22+
Assert.True(e.Enforce("alice", "data1", "read"));
23+
Assert.False(e.Enforce("alice", "data1", "write"));
24+
Assert.False(e.Enforce("alice", "data2", "read"));
25+
Assert.False(e.Enforce("alice", "data2", "write"));
26+
Assert.False(e.Enforce("bob", "data1", "read"));
27+
Assert.False(e.Enforce("bob", "data1", "write"));
28+
Assert.False(e.Enforce("bob", "data2", "read"));
29+
Assert.True(e.Enforce("bob", "data2", "write"));
30+
}
31+
32+
[Fact]
33+
public void TestStreamAdapter()
34+
{
35+
Enforcer e = new("Examples/basic_model.conf");
36+
Assert.False(e.Enforce("alice", "data1", "read"));
37+
38+
StreamAdapter a = new(File.OpenRead("Examples/basic_policy.csv"));
39+
e.SetAdapter(a);
40+
e.LoadPolicy();
41+
42+
Assert.True(e.Enforce("alice", "data1", "read"));
43+
Assert.False(e.Enforce("alice", "data1", "write"));
44+
Assert.False(e.Enforce("alice", "data2", "read"));
45+
Assert.False(e.Enforce("alice", "data2", "write"));
46+
Assert.False(e.Enforce("bob", "data1", "read"));
47+
Assert.False(e.Enforce("bob", "data1", "write"));
48+
Assert.False(e.Enforce("bob", "data2", "read"));
49+
Assert.True(e.Enforce("bob", "data2", "write"));
50+
}
51+
52+
[Fact]
53+
public void TestTextAdapter()
54+
{
55+
Enforcer e = new("Examples/basic_model.conf");
56+
Assert.False(e.Enforce("alice", "data1", "read"));
57+
58+
TextAdapter a = new(File.ReadAllText("Examples/basic_policy.csv"));
59+
e.SetAdapter(a);
60+
e.LoadPolicy();
61+
62+
Assert.True(e.Enforce("alice", "data1", "read"));
63+
Assert.False(e.Enforce("alice", "data1", "write"));
64+
Assert.False(e.Enforce("alice", "data2", "read"));
65+
Assert.False(e.Enforce("alice", "data2", "write"));
66+
Assert.False(e.Enforce("bob", "data1", "read"));
67+
Assert.False(e.Enforce("bob", "data1", "write"));
68+
Assert.False(e.Enforce("bob", "data2", "read"));
69+
Assert.True(e.Enforce("bob", "data2", "write"));
70+
}
71+
}

0 commit comments

Comments
 (0)