Skip to content

Commit

Permalink
feat: support addNamedMatchingFunc and addNamedDomainMatchingFunc (#276)
Browse files Browse the repository at this point in the history
Signed-off-by: tangyang9464 <tangyang9464@163.com>
  • Loading branch information
tangyang9464 authored May 31, 2022
1 parent 24826bc commit a21b219
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 6 deletions.
34 changes: 34 additions & 0 deletions src/main/java/org/casbin/jcasbin/main/CoreEnforcer.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiPredicate;

import org.casbin.jcasbin.effect.DefaultEffector;
import org.casbin.jcasbin.effect.Effect;
import org.casbin.jcasbin.effect.Effector;
Expand Down Expand Up @@ -618,6 +620,38 @@ public boolean enforceWithMatcher(String matcher, Object... rvals) {
return enforce(matcher, rvals);
}

/**
* addNamedMatchingFunc add MatchingFunc by ptype RoleManager
*/
public boolean addNamedMatchingFunc(String ptype, String name, BiPredicate<String, String> fn){
if(rmMap.containsKey(ptype)){
DefaultRoleManager rm = (DefaultRoleManager) rmMap.get(ptype);
rm.addMatchingFunc(name, fn);
clearRmMap();
if(autoBuildRoleLinks){
buildRoleLinks();
}
return true;
}
return false;
}

/**
* addNamedMatchingFunc add MatchingFunc by ptype RoleManager
*/
public boolean addNamedDomainMatchingFunc(String ptype, String name, BiPredicate<String, String> fn){
if(rmMap.containsKey(ptype)){
DefaultRoleManager rm = (DefaultRoleManager) rmMap.get(ptype);
rm.addDomainMatchingFunc(name, fn);
clearRmMap();
if(autoBuildRoleLinks){
buildRoleLinks();
}
return true;
}
return false;
}

private void getRTokens(Map<String, Object> parameters, Object... rvals) {
for (String rKey : model.model.get("r").keySet()) {
if (!(rvals.length == model.model.get("r").get(rKey).tokens.length)) {
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/org/casbin/jcasbin/rbac/DefaultRoleManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public DefaultRoleManager(int maxHierarchyLevel, final BiPredicate<String, Strin
*
* @param matchingFunc the matching function.
*/
public void addMatchingFunc(BiPredicate<String, String> matchingFunc) {
public void addMatchingFunc(String name, BiPredicate<String, String> matchingFunc) {
this.matchingFunc = matchingFunc;
}

Expand All @@ -77,7 +77,7 @@ public void addMatchingFunc(BiPredicate<String, String> matchingFunc) {
*
* @param domainMatchingFunc the domain matching function.
*/
public void addDomainMatchingFunc(BiPredicate<String, String> domainMatchingFunc) {
public void addDomainMatchingFunc(String name, BiPredicate<String, String> domainMatchingFunc) {
this.domainMatchingFunc = domainMatchingFunc;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,9 @@ public void testImplicitPermissionAPIWithDomainMatch() {

@Test
public void testEnforceAPIWithAllMatchPatterns() {
final Enforcer e = new Enforcer("examples/rbac_with_all_pattern_model.conf");
e.setAdapter(new FileAdapter("examples/rbac_with_all_pattern_policy.csv"));
e.setRoleManager(new DefaultRoleManager(10, BuiltInFunctions::keyMatch2, BuiltInFunctions::allMatch));
e.loadPolicy();
final Enforcer e = new Enforcer("examples/rbac_with_all_pattern_model.conf", "examples/rbac_with_all_pattern_policy.csv");
e.addNamedMatchingFunc("g", "KeyMatch2", BuiltInFunctions::keyMatch2);
e.addNamedDomainMatchingFunc("g", "AllMatch", BuiltInFunctions::allMatch);

testDomainEnforce(e, "alice", "domain1", "/book/1", "read", true);
testDomainEnforce(e, "alice", "domain1", "/book/1", "write", false);
Expand Down

0 comments on commit a21b219

Please # to comment.