Skip to content

Commit 5cf3929

Browse files
committed
feat: add text mode at file adapter
Signed-off-by: Taoyuesong <634774653@qq.com>
1 parent 0b477c0 commit 5cf3929

File tree

4 files changed

+239
-220
lines changed

4 files changed

+239
-220
lines changed

Casbin.UnitTests/ModelTests/EnforcerTest.cs

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using System.IO;
3+
using System.Linq;
34
using System.Text;
45
using System.Threading.Tasks;
56
using Casbin.Model;
@@ -700,28 +701,6 @@ public async Task TestInitEmptyAsync()
700701
await TestEnforceAsync(e, "alice", "/alice_data/resource1", "GET", true);
701702
}
702703

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

726705
[Fact]
727706
public async Task TestInitEmptyByInputStreamAsync()
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
using System.IO;
2+
using System.Threading.Tasks;
3+
using Casbin.Persist.Adapter.File;
4+
using Xunit;
5+
6+
namespace Casbin.UnitTests.PersistTests.FileTests;
7+
8+
public class FileAdapterTest
9+
{
10+
[Fact]
11+
public void TestLoadPolicy()
12+
{
13+
// Test read file
14+
FileAdapter adapter = new("examples/rbac_policy.csv");
15+
Enforcer e = new("examples/rbac_model.conf", adapter);
16+
e.LoadPolicy();
17+
e.BuildRoleLinks();
18+
19+
Assert.True(e.Enforce("alice", "data1", "read"));
20+
Assert.False(e.Enforce("alice", "data1", "write"));
21+
Assert.True(e.Enforce("alice", "data2", "read"));
22+
Assert.True(e.Enforce("alice", "data2", "write"));
23+
Assert.False(e.Enforce("bob", "data1", "read"));
24+
Assert.False(e.Enforce("bob", "data1", "write"));
25+
Assert.False(e.Enforce("bob", "data2", "read"));
26+
Assert.True(e.Enforce("bob", "data2", "write"));
27+
28+
// Test read file by create API
29+
adapter = FileAdapter.CreateFromFile("examples/rbac_policy.csv");
30+
e = new("examples/rbac_model.conf", adapter);
31+
e.LoadPolicy();
32+
e.BuildRoleLinks();
33+
34+
Assert.True(e.Enforce("alice", "data1", "read"));
35+
Assert.False(e.Enforce("alice", "data1", "write"));
36+
Assert.True(e.Enforce("alice", "data2", "read"));
37+
Assert.True(e.Enforce("alice", "data2", "write"));
38+
Assert.False(e.Enforce("bob", "data1", "read"));
39+
Assert.False(e.Enforce("bob", "data1", "write"));
40+
Assert.False(e.Enforce("bob", "data2", "read"));
41+
Assert.True(e.Enforce("bob", "data2", "write"));
42+
43+
// Test read text
44+
string text = File.ReadAllText("examples/rbac_policy.csv");
45+
adapter = FileAdapter.CreateFromText(text);
46+
e = new("examples/rbac_model.conf", adapter);
47+
e.LoadPolicy();
48+
e.BuildRoleLinks();
49+
50+
Assert.True(e.Enforce("alice", "data1", "read"));
51+
Assert.False(e.Enforce("alice", "data1", "write"));
52+
Assert.True(e.Enforce("alice", "data2", "read"));
53+
Assert.True(e.Enforce("alice", "data2", "write"));
54+
Assert.False(e.Enforce("bob", "data1", "read"));
55+
Assert.False(e.Enforce("bob", "data1", "write"));
56+
Assert.False(e.Enforce("bob", "data2", "read"));
57+
Assert.True(e.Enforce("bob", "data2", "write"));
58+
}
59+
60+
[Fact]
61+
public async Task TestLoadPolicyAsync()
62+
{
63+
// Test read file
64+
FileAdapter adapter = new("examples/rbac_policy.csv");
65+
Enforcer e = new("examples/rbac_model.conf", adapter);
66+
await e.LoadPolicyAsync();
67+
e.BuildRoleLinks();
68+
69+
Assert.True(await e.EnforceAsync("alice", "data1", "read"));
70+
Assert.False(await e.EnforceAsync("alice", "data1", "write"));
71+
Assert.True(await e.EnforceAsync("alice", "data2", "read"));
72+
Assert.True(await e.EnforceAsync("alice", "data2", "write"));
73+
Assert.False(await e.EnforceAsync("bob", "data1", "read"));
74+
Assert.False(await e.EnforceAsync("bob", "data1", "write"));
75+
Assert.False(await e.EnforceAsync("bob", "data2", "read"));
76+
Assert.True(await e.EnforceAsync("bob", "data2", "write"));
77+
78+
// Test read file by create API
79+
adapter = FileAdapter.CreateFromFile("examples/rbac_policy.csv");
80+
e = new("examples/rbac_model.conf", adapter);
81+
await e.LoadPolicyAsync();
82+
e.BuildRoleLinks();
83+
84+
Assert.True(await e.EnforceAsync("alice", "data1", "read"));
85+
Assert.False(await e.EnforceAsync("alice", "data1", "write"));
86+
Assert.True(await e.EnforceAsync("alice", "data2", "read"));
87+
Assert.True(await e.EnforceAsync("alice", "data2", "write"));
88+
Assert.False(await e.EnforceAsync("bob", "data1", "read"));
89+
Assert.False(await e.EnforceAsync("bob", "data1", "write"));
90+
Assert.False(await e.EnforceAsync("bob", "data2", "read"));
91+
Assert.True(await e.EnforceAsync("bob", "data2", "write"));
92+
93+
// Test read text
94+
string text = File.ReadAllText("examples/rbac_policy.csv");
95+
adapter = FileAdapter.CreateFromText(text);
96+
e = new("examples/rbac_model.conf", adapter);
97+
await e.LoadPolicyAsync();
98+
e.BuildRoleLinks();
99+
100+
Assert.True(await e.EnforceAsync("alice", "data1", "read"));
101+
Assert.False(await e.EnforceAsync("alice", "data1", "write"));
102+
Assert.True(await e.EnforceAsync("alice", "data2", "read"));
103+
Assert.True(await e.EnforceAsync("alice", "data2", "write"));
104+
Assert.False(await e.EnforceAsync("bob", "data1", "read"));
105+
Assert.False(await e.EnforceAsync("bob", "data1", "write"));
106+
Assert.False(await e.EnforceAsync("bob", "data2", "read"));
107+
Assert.True(await e.EnforceAsync("bob", "data2", "write"));
108+
}
109+
}

0 commit comments

Comments
 (0)