Skip to content

Commit

Permalink
feat: add text mode at file adapter
Browse files Browse the repository at this point in the history
Signed-off-by: Taoyuesong <634774653@qq.com>
  • Loading branch information
Taoyuesong committed Sep 21, 2024
1 parent 0b477c0 commit 5cf3929
Show file tree
Hide file tree
Showing 4 changed files with 239 additions and 220 deletions.
23 changes: 1 addition & 22 deletions Casbin.UnitTests/ModelTests/EnforcerTest.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Casbin.Model;
Expand Down Expand Up @@ -700,28 +701,6 @@ public async Task TestInitEmptyAsync()
await TestEnforceAsync(e, "alice", "/alice_data/resource1", "GET", true);
}

[Fact]
public void TestInitEmptyByInputStream()
{
Enforcer e = new();

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)");

using (FileStream fs = new("Examples/keymatch_policy.csv", FileMode.Open, FileAccess.Read,
FileShare.ReadWrite))
{
FileAdapter a = new(fs);
e.SetModel(m);
e.SetAdapter(a);
e.LoadPolicy();

TestEnforce(e, "alice", "/alice_data/resource1", "GET", true);
}
}

[Fact]
public async Task TestInitEmptyByInputStreamAsync()
Expand Down
109 changes: 109 additions & 0 deletions Casbin.UnitTests/PersistTests/FileTests/FileAdapterTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
using System.IO;
using System.Threading.Tasks;
using Casbin.Persist.Adapter.File;
using Xunit;

namespace Casbin.UnitTests.PersistTests.FileTests;

public class FileAdapterTest
{
[Fact]
public void TestLoadPolicy()
{
// Test read file
FileAdapter adapter = new("examples/rbac_policy.csv");
Enforcer e = new("examples/rbac_model.conf", adapter);
e.LoadPolicy();
e.BuildRoleLinks();

Assert.True(e.Enforce("alice", "data1", "read"));
Assert.False(e.Enforce("alice", "data1", "write"));
Assert.True(e.Enforce("alice", "data2", "read"));
Assert.True(e.Enforce("alice", "data2", "write"));
Assert.False(e.Enforce("bob", "data1", "read"));
Assert.False(e.Enforce("bob", "data1", "write"));
Assert.False(e.Enforce("bob", "data2", "read"));
Assert.True(e.Enforce("bob", "data2", "write"));

// Test read file by create API
adapter = FileAdapter.CreateFromFile("examples/rbac_policy.csv");
e = new("examples/rbac_model.conf", adapter);
e.LoadPolicy();
e.BuildRoleLinks();

Assert.True(e.Enforce("alice", "data1", "read"));
Assert.False(e.Enforce("alice", "data1", "write"));
Assert.True(e.Enforce("alice", "data2", "read"));
Assert.True(e.Enforce("alice", "data2", "write"));
Assert.False(e.Enforce("bob", "data1", "read"));
Assert.False(e.Enforce("bob", "data1", "write"));
Assert.False(e.Enforce("bob", "data2", "read"));
Assert.True(e.Enforce("bob", "data2", "write"));

// Test read text
string text = File.ReadAllText("examples/rbac_policy.csv");
adapter = FileAdapter.CreateFromText(text);
e = new("examples/rbac_model.conf", adapter);
e.LoadPolicy();
e.BuildRoleLinks();

Assert.True(e.Enforce("alice", "data1", "read"));
Assert.False(e.Enforce("alice", "data1", "write"));
Assert.True(e.Enforce("alice", "data2", "read"));
Assert.True(e.Enforce("alice", "data2", "write"));
Assert.False(e.Enforce("bob", "data1", "read"));
Assert.False(e.Enforce("bob", "data1", "write"));
Assert.False(e.Enforce("bob", "data2", "read"));
Assert.True(e.Enforce("bob", "data2", "write"));
}

[Fact]
public async Task TestLoadPolicyAsync()
{
// Test read file
FileAdapter adapter = new("examples/rbac_policy.csv");
Enforcer e = new("examples/rbac_model.conf", adapter);
await e.LoadPolicyAsync();
e.BuildRoleLinks();

Assert.True(await e.EnforceAsync("alice", "data1", "read"));
Assert.False(await e.EnforceAsync("alice", "data1", "write"));
Assert.True(await e.EnforceAsync("alice", "data2", "read"));
Assert.True(await e.EnforceAsync("alice", "data2", "write"));
Assert.False(await e.EnforceAsync("bob", "data1", "read"));
Assert.False(await e.EnforceAsync("bob", "data1", "write"));
Assert.False(await e.EnforceAsync("bob", "data2", "read"));
Assert.True(await e.EnforceAsync("bob", "data2", "write"));

// Test read file by create API
adapter = FileAdapter.CreateFromFile("examples/rbac_policy.csv");
e = new("examples/rbac_model.conf", adapter);
await e.LoadPolicyAsync();
e.BuildRoleLinks();

Assert.True(await e.EnforceAsync("alice", "data1", "read"));
Assert.False(await e.EnforceAsync("alice", "data1", "write"));
Assert.True(await e.EnforceAsync("alice", "data2", "read"));
Assert.True(await e.EnforceAsync("alice", "data2", "write"));
Assert.False(await e.EnforceAsync("bob", "data1", "read"));
Assert.False(await e.EnforceAsync("bob", "data1", "write"));
Assert.False(await e.EnforceAsync("bob", "data2", "read"));
Assert.True(await e.EnforceAsync("bob", "data2", "write"));

// Test read text
string text = File.ReadAllText("examples/rbac_policy.csv");
adapter = FileAdapter.CreateFromText(text);
e = new("examples/rbac_model.conf", adapter);
await e.LoadPolicyAsync();
e.BuildRoleLinks();

Assert.True(await e.EnforceAsync("alice", "data1", "read"));
Assert.False(await e.EnforceAsync("alice", "data1", "write"));
Assert.True(await e.EnforceAsync("alice", "data2", "read"));
Assert.True(await e.EnforceAsync("alice", "data2", "write"));
Assert.False(await e.EnforceAsync("bob", "data1", "read"));
Assert.False(await e.EnforceAsync("bob", "data1", "write"));
Assert.False(await e.EnforceAsync("bob", "data2", "read"));
Assert.True(await e.EnforceAsync("bob", "data2", "write"));
}
}
Loading

0 comments on commit 5cf3929

Please sign in to comment.