From 6776f75f44edf1b9cf59a9e9b0234266692108d1 Mon Sep 17 00:00:00 2001 From: Liao Xin <93535922+liewstar@users.noreply.github.com> Date: Sat, 27 Jul 2024 17:58:10 +0800 Subject: [PATCH] feat: sync conditional roles to regular roles to fix ConditionalRoleManager bug (#410) * feat:synchronize conditional roles to regular roles * feat:synchronize the rmMap --- src/main/java/org/casbin/jcasbin/main/CoreEnforcer.java | 2 ++ src/main/java/org/casbin/jcasbin/model/Assertion.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/org/casbin/jcasbin/main/CoreEnforcer.java b/src/main/java/org/casbin/jcasbin/main/CoreEnforcer.java index 4567e994..7973811f 100644 --- a/src/main/java/org/casbin/jcasbin/main/CoreEnforcer.java +++ b/src/main/java/org/casbin/jcasbin/main/CoreEnforcer.java @@ -388,6 +388,7 @@ private void initRmMap() { if (token_length <= 2 && paramsToken_length != 0) { assertion.condRM =new ConditionalRoleManager(10); condRmMap.put(ptype, assertion.condRM); + rmMap.put(ptype, assertion.condRM); } if (token_length > 2) { if (paramsToken_length == 0) { @@ -396,6 +397,7 @@ private void initRmMap() { } else { assertion.condRM = new ConditionalRoleManager(10); condRmMap.put(ptype, assertion.condRM); + rmMap.put(ptype, assertion.condRM); } String matchFun = "keyMatch(r_dom, p_dom)"; if (model.model.get("m").get("m").value.contains(matchFun)) { diff --git a/src/main/java/org/casbin/jcasbin/model/Assertion.java b/src/main/java/org/casbin/jcasbin/model/Assertion.java index 15c5243d..ee9babb8 100644 --- a/src/main/java/org/casbin/jcasbin/model/Assertion.java +++ b/src/main/java/org/casbin/jcasbin/model/Assertion.java @@ -175,10 +175,12 @@ public void addConditionalRoleLink(List rule, List domainRule){ if (domainRule_num == 0){ condRM.addLink(rule.get(0), rule.get(1)); condRM.setLinkConditionFuncParams(rule.get(0), rule.get(1), rule.subList(tokens.length, rule.size()).toArray(new String[0])); + rm = condRM; }else { String domain = domainRule.get(0); condRM.addLink(rule.get(0), rule.get(1)); condRM.setDomainLinkConditionFuncParams(rule.get(0), rule.get(1), domain, rule.subList(tokens.length, rule.size()).toArray(new String[0])); + rm = condRM; } }