Comments (6)
What you need is a rules engine in this case, and not a language per se (although the rules may be expressed in a language syntax). You probably also need to trade off the complexity of maintaining a rules engine vs. keeping to the most common usages but be simple.
The main difference between a rules engine and a language interpreter is that, in a rules engine, you have to topological sort the rules (basically a dependency graph) according to execution order (layers) and to detect cycles/loops, because the rules will not be run in the order scripted.
I have written such rules engine years ago on top of a expression syntax. Maybe if I have some free time, I'll whip out a simple module based on Rhai for you to test out.
from casbin-rs.
See also: casbin/casbin#432
from casbin-rs.
If someone would like to design, based on casbin
needs, what the rules will look like (hopefully they're all similar to Rhai syntax), then I can just code according to that design.
from casbin-rs.
@schungx Yeah it can be interested in testing your rule engine module, I have used some rule engines but they are quite limited and lack of powerful expressions.
If someone would like to design, based on casbin needs, what the rules will look like (hopefully they're all similar to Rhai syntax), then I can just code according to that design.
For this moment, I think we pretty need some methods on array like:
- any
- all
- reduce
JS syntax is fine I think
from casbin-rs.
So if we stick to normal function calls syntax with no wierd symbols, plus assignment statements to define rules, that should be enough?
Normally rules are something like:
Rule_1 -> Conditon1:all, Conditon2:any | Condition3
This will be expressed as
rule_1 = all(condition1) && any(condition2) || condition3;
In fact, if you order the rules in the correct execution order, and put let
in front of the rule names, then you really get a Rhai scriptlet. If I put in a feature to omit the let
keyword (i.e. assignment to a non-existing variable creates it), then it'll be a valid script by itself.
Actually you'd want to decide whether you really want a true rules engine, or whether you want your rules to be scriptable -- meaning that your user can actually write a mini-program for the matching, returning a value, with full language features such as loops, if-else etc.
from casbin-rs.
From what I can tell, Teaclave
has a solver engine (or inference engine), which is one step up from a rules engine. A solver engine does back-tracking to try different combinations to find a solution.
The problem is that running a full-blown solver for each enforce operation is gotta be very slow, unless a lot of optimizations are done. However, logic is obviously much simpler to express for a solver than to actually write a program to search for a solution. So essentially, you're trading off power/ease of expression vs. ease of implementation.
Another problem with expressing logic rules is that it is hard to do calculations (at least not without going through a lot of hoops). Depending on the engine, simple things like p.sub.age > 16
is going to be clumsy to formulate without first defining what it means by greater-than
.
If you really want a solver, maybe something like https://github.com/rust-lang/chalk is a good choice, since it is the future engine for Rust's trait solver.
from casbin-rs.
Related Issues (20)
- get_all_actions get_all_objects HOT 1
- Improve the auth capability for Tensorbase HOT 4
- [Question] Using Casbin for data filtering HOT 5
- Fix the CI error HOT 2
- Multithreaded environment: RwLock needed around Enforcer with sqlx-adapter? HOT 6
- Question: how to preload policy from file, then use db-backed adapter? HOT 12
- keyMatch2 and keyMatch3 can loop indefinitely HOT 7
- How to dynamically add a policy to a lazy static environment HOT 3
- Getting a error while setting up rust-basin-example in local environment HOT 8
- Benchmark workflow doesnโt work well HOT 1
- Support frontend WASM authorization via Casbin-RS HOT 2
- Enforcer shouldn't load full policy when loading a filtered adapter HOT 3
- Casbin Io Error HOT 2
- How is performance of the Rhai engine in Casbin? HOT 1
- does casbin-rs support mysql adapter? HOT 1
- rust multiple section types example HOT 1
- Question About ABAC Usage And Debug HOT 4
- Nightly (2024-02-06) Fails to Build due to old dependency on ahash 0.7.7 HOT 3
- macos m1 build error HOT 3
- Make a Casbin authorization middleware for Salvo
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from casbin-rs.