From 4abeb4a37abae2657a870d8f82a3e48506c24fde Mon Sep 17 00:00:00 2001 From: Jack <57058925+JackYifan@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:03:27 +0800 Subject: [PATCH] feat: support CLI usage for enforceEx (#406) --- .../java/org/casbin/jcasbin/cli/Client.java | 17 +++++++++++++---- .../org/casbin/jcasbin/main/ClientTest.java | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/casbin/jcasbin/cli/Client.java b/src/main/java/org/casbin/jcasbin/cli/Client.java index 40cffc9..ff28a5a 100644 --- a/src/main/java/org/casbin/jcasbin/cli/Client.java +++ b/src/main/java/org/casbin/jcasbin/cli/Client.java @@ -7,14 +7,14 @@ public class Client { public static void main(String[] args) { try { - boolean res = clientEnforce(args); + Object res = clientEnforce(args); System.out.println(res); } catch (ParseException e) { e.printStackTrace(); } } - public static boolean clientEnforce(String[] args) throws ParseException { + public static Object clientEnforce(String[] args) throws ParseException { Options options = new Options(); Option model = new Option("m", "model", true, "the path of the model file"); options.addOption(model); @@ -22,12 +22,21 @@ public static boolean clientEnforce(String[] args) throws ParseException { options.addOption(config); Option enforceCMD = new Option("e", "enforce", true, "enforce"); options.addOption(enforceCMD); + Option enforceExCMD = new Option("ex", "enforceEx", true, "enforceEx"); + options.addOption(enforceExCMD); CommandLineParser parser = new DefaultParser(); CommandLine cmd = parser.parse(options, args); String modelPath = cmd.getOptionValue("model"); String policyFile = cmd.getOptionValue("policy"); Enforcer e = new Enforcer(modelPath, policyFile); - String enforce = cmd.getOptionValue("enforce"); - return e.enforce(enforce.split(",")); + if (cmd.hasOption("enforce")) { + String enforceArgs = cmd.getOptionValue("enforce"); + return e.enforce(enforceArgs.split(",")); + } else if (cmd.hasOption("enforceEx")) { + String enforceExArgs = cmd.getOptionValue("enforceEx"); + return e.enforceEx(enforceExArgs.split(",")); + } else { + return null; + } } } diff --git a/src/test/java/org/casbin/jcasbin/main/ClientTest.java b/src/test/java/org/casbin/jcasbin/main/ClientTest.java index 97328de..da3a439 100644 --- a/src/test/java/org/casbin/jcasbin/main/ClientTest.java +++ b/src/test/java/org/casbin/jcasbin/main/ClientTest.java @@ -32,4 +32,20 @@ public void testABAC() throws ParseException { assertEquals(Client.clientEnforce(new String[]{"-m","examples/abac_rule_with_domains_model.conf","-p","examples/abac_rule_with_domains_policy.csv","-e","bob,domain2,data2,read"}), true); } + @Test + public void testEnforceEx() throws ParseException { + testEnforceExCli((EnforceResult)Client.clientEnforce(new String[]{"-m", "examples/basic_model.conf", "-p", "examples/basic_policy.csv", "-ex", "alice,data1,read"}),true, new String[]{"alice", "data1", "read"}); + testEnforceExCli((EnforceResult)Client.clientEnforce(new String[]{"-m", "examples/basic_model.conf", "-p", "examples/basic_policy.csv", "-ex", "bob,data2,write"}),true, new String[]{"bob", "data2", "write"}); + testEnforceExCli((EnforceResult)Client.clientEnforce(new String[]{"-m", "examples/basic_model.conf", "-p", "examples/basic_policy.csv", "-ex", "root,data2,read"}),false, new String[]{}); + testEnforceExCli((EnforceResult)Client.clientEnforce(new String[]{"-m", "examples/basic_model.conf", "-p", "examples/basic_policy.csv", "-ex", "root,data3,read"}),false, new String[]{}); + testEnforceExCli((EnforceResult)Client.clientEnforce(new String[]{"-m", "examples/basic_model.conf", "-p", "examples/basic_policy.csv", "-ex", "jack,data3,read"}),false, new String[]{}); + } + + private void testEnforceExCli(EnforceResult enforceResult, boolean res, String[] explain) { + assertEquals(res, enforceResult.isAllow()); + for (int i = 0; i < explain.length; i++) { + assertEquals(explain[i], enforceResult.getExplain().get(i)); + } + } + }