Casbin.NET
Casbin.NET copied to clipboard
Eval not supported in non-generic enforces (request of policy size > 12)
Hi, we ran into an issue where the eval() or other matcher functions are not supported for large request or policy sizes:
[Fact]
public void EvalInNonGenericTest()
{
var model = DefaultModel.Create();
model.AddDef("e", "e", "some(where (p.eft == allow))");
model.AddDef("r", "r", "sub, obj, act, r1, r2, r3, r4, r5, r6, r7, r8, r9");
model.AddDef("p", "p", "sub_rule, obj, act, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11");
model.AddDef("m", "m", "eval(p.sub_rule) && r.obj == p.obj && r.act == p.act");
var enforcer = new Enforcer(model);
var success = enforcer.AddNamedPolicy("p", "r.sub.Age > 18", "/data1", "read", "p1", "p2", "p3", "p4", "p5", "p6", "p7", "p8", "p9", "p10", "p11");
Assert.True(success);
var sub = new { Name = "alice", Age = 20 };
var context = enforcer.CreateContext("r", "p", "e", "m", false);
var allowed = enforcer.Enforce(context, sub, "/data1", "read", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9");
Assert.True(allowed);
}
Results in an error: DynamicExpresso.Exceptions.ParseException : No property or field 'Age' exists in type 'String' (at index 5).
It seems that when context.View.SupportGeneric is false all request arguments are handled as strings. Would it be possible to add support for this? Or do you recommend a workaround? Thanks!