From 629f545f1032e79b7d6d54f37cd0c796ce6086f7 Mon Sep 17 00:00:00 2001 From: Yixiang Zhao Date: Wed, 26 Jan 2022 19:49:25 +0800 Subject: [PATCH] fix: 'in' operator causes the expression to lose content (#253) Signed-off-by: Yixiang Zhao --- src/main/java/org/casbin/jcasbin/util/Util.java | 9 +++++---- src/test/java/org/casbin/jcasbin/main/UtilTest.java | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/casbin/jcasbin/util/Util.java b/src/main/java/org/casbin/jcasbin/util/Util.java index 51606588..73cf9c5c 100644 --- a/src/main/java/org/casbin/jcasbin/util/Util.java +++ b/src/main/java/org/casbin/jcasbin/util/Util.java @@ -117,12 +117,13 @@ public static String convertInSyntax(String expString) { String reg = "([a-zA-Z0-9_.()\"]*) +in +([a-zA-Z0-9_.()\"]*)"; Matcher m1 = Pattern.compile(reg).matcher(expString); StringBuffer sb = new StringBuffer(); - boolean flag=false; + boolean flag = false; while (m1.find()) { - flag=true; - m1.appendReplacement(sb,"include($2, $1)"); + flag = true; + m1.appendReplacement(sb, "include($2, $1)"); } - return flag?sb.toString():expString; + m1.appendTail(sb); + return flag ? sb.toString() : expString; } /** * removeComments removes the comments starting with # in the text. diff --git a/src/test/java/org/casbin/jcasbin/main/UtilTest.java b/src/test/java/org/casbin/jcasbin/main/UtilTest.java index 799d32e5..eeced833 100644 --- a/src/test/java/org/casbin/jcasbin/main/UtilTest.java +++ b/src/test/java/org/casbin/jcasbin/main/UtilTest.java @@ -45,6 +45,7 @@ public void testConvertInSyntax(){ assertEquals("include(r_obj, r_sub)", Util.convertInSyntax("r_sub in r_obj")); assertEquals("include(r_obj, r_sub.name)", Util.convertInSyntax("r_sub.name in r_obj")); assertEquals("include(r_obj.name, r_sub.name)", Util.convertInSyntax("r_sub.name in r_obj.name")); + assertEquals("include(r_obj, r_sub) && r.obj == p.obj", Util.convertInSyntax("r_sub in r_obj && r.obj == p.obj")); } @Test