blob: 9856fb507a6e57d23afe4795aa2ba6b9e0077b4c [file] [log] [blame]
package org.casbin.command;
import org.apache.commons.cli.*;
import org.casbin.NewEnforcer;
import java.util.HashMap;
import java.util.Map;
import static org.casbin.util.Util.*;
public class ManagementCommand extends AbstractCommand{
private static final String ENFORCE = "enforce";
private static final String ENFORCE_WITH_MATCHER = "enforceWithMatcher";
private static final String ENFORCE_EX = "enforceEx";
private static final String ENFORCE_EX_WITH_MATCHER = "enforceExWithMatcher";
private static final String BATCH_ENFORCE = "batchEnforce";
private static final String GET_ALL_SUBJECTS = "getAllSubjects";
private static final String GET_ALL_NAMED_SUBJECTS = "getAllNamedSubjects";
private static final String GET_ALL_OBJECTS = "getAllObjects";
private static final String GET_ALL_NAMED_OBJECTS = "getAllNamedObjects";
private static final String GET_ALL_ACTIONS = "getAllActions";
private static final String GET_ALL_NAMED_ACTIONS = "getAllNamedActions";
private static final String GET_ALL_ROLES = "getAllRoles";
private static final String GET_ALL_NAMED_ROLES = "getAllNamedRoles";
private static final String GET_POLICY = "getPolicy";
private static final String GET_FILTERED_POLICY = "getFilteredPolicy";
private static final String GET_NAMED_POLICY = "getNamedPolicy";
private static final String GET_FILTERED_NAMED_POLICY = "getFilteredNamedPolicy";
private static final String GET_GROUPING_POLICY = "getGroupingPolicy";
private static final String GET_FILTERED_GROUPING_POLICY = "getFilteredGroupingPolicy";
private static final String GET_NAMED_GROUPING_POLICY = "getNamedGroupingPolicy";
private static final String GET_FILTERED_NAMED_GROUPING_POLICY = "getFilteredNamedGroupingPolicy";
private static final String HAS_POLICY = "hasPolicy";
private static final String HAS_NAMED_POLICY = "hasNamedPolicy";
private static final String ADD_POLICY = "addPolicy";
private static final String ADD_POLICIES = "addPolicies";
private static final String ADD_NAMED_POLICY = "addNamedPolicy";
private static final String ADD_NAMED_POLICIES = "addNamedPolicies";
private static final String REMOVE_POLICY = "removePolicy";
private static final String REMOVE_POLICIES = "removePolicies";
private static final String REMOVE_FILTERED_POLICY = "removeFilteredPolicy";
private static final String REMOVE_NAMED_POLICY = "removeNamedPolicy";
private static final String REMOVE_NAMED_POLICIES = "removeNamedPolicies";
private static final String REMOVE_FILTERED_NAMED_POLICY = "removeFilteredNamedPolicy";
private static final String HAS_GROUPING_POLICY = "hasGroupingPolicy";
private static final String HAS_NAMED_GROUPING_POLICY = "hasNamedGroupingPolicy";
private static final String ADD_GROUPING_POLICY = "addGroupingPolicy";
private static final String ADD_GROUPING_POLICIES = "addGroupingPolicies";
private static final String ADD_NAMED_GROUPING_POLICY = "addNamedGroupingPolicy";
private static final String ADD_NAMED_GROUPING_POLICIES = "addNamedGroupingPolicies";
private static final String REMOVE_GROUPING_POLICY = "removeGroupingPolicy";
private static final String REMOVE_GROUPING_POLICIES = "removeGroupingPolicies";
private static final String REMOVE_FILTERED_GROUPING_POLICY = "removeFilteredGroupingPolicy";
private static final String REMOVE_NAMED_GROUPING_POLICY = "removeNamedGroupingPolicy";
private static final String REMOVE_FILTERED_NAMED_GROUPING_POLICY = "removeFilteredNamedGroupingPolicy";
private static final String UPDATE_POLICY = "updatePolicy";
private static final String LOAD_FILTERED_POLICY = "loadFilteredPolicy";
private static final String UPDATE_GROUPING_POLICY = "updateGroupingPolicy";
private static final String UPDATE_NAMED_GROUPING_POLICY = "updateNamedGroupingPolicy";
@Override
public String run(NewEnforcer enforcer, String... args) throws Exception {
Options options = getOptions();
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
Map<String, OperationHandle> handlers = getStringOperationHandleMap(enforcer);
try {
CommandLine cmd = parser.parse(options, args);
String option = cmd.hasOption(ENFORCE) ? ENFORCE :
cmd.hasOption(ENFORCE_WITH_MATCHER) ? ENFORCE_WITH_MATCHER :
cmd.hasOption(ENFORCE_EX) ? ENFORCE_EX :
cmd.hasOption(ENFORCE_EX_WITH_MATCHER) ? ENFORCE_EX_WITH_MATCHER :
cmd.hasOption(BATCH_ENFORCE) ? BATCH_ENFORCE :
cmd.hasOption(GET_ALL_SUBJECTS) ? GET_ALL_SUBJECTS :
cmd.hasOption(GET_ALL_NAMED_SUBJECTS) ? GET_ALL_NAMED_SUBJECTS :
cmd.hasOption(GET_ALL_OBJECTS) ? GET_ALL_OBJECTS :
cmd.hasOption(GET_ALL_NAMED_OBJECTS) ? GET_ALL_NAMED_OBJECTS :
cmd.hasOption(GET_ALL_ACTIONS) ? GET_ALL_ACTIONS :
cmd.hasOption(GET_ALL_NAMED_ACTIONS) ? GET_ALL_NAMED_ACTIONS :
cmd.hasOption(GET_ALL_ROLES) ? GET_ALL_ROLES :
cmd.hasOption(GET_ALL_NAMED_ROLES) ? GET_ALL_NAMED_ROLES :
cmd.hasOption(GET_POLICY) ? GET_POLICY :
cmd.hasOption(GET_FILTERED_POLICY) ? GET_FILTERED_POLICY :
cmd.hasOption(GET_NAMED_POLICY) ? GET_NAMED_POLICY :
cmd.hasOption(GET_FILTERED_NAMED_POLICY) ? GET_FILTERED_NAMED_POLICY :
cmd.hasOption(GET_GROUPING_POLICY) ? GET_GROUPING_POLICY :
cmd.hasOption(GET_FILTERED_GROUPING_POLICY) ? GET_FILTERED_GROUPING_POLICY :
cmd.hasOption(GET_NAMED_GROUPING_POLICY) ? GET_NAMED_GROUPING_POLICY :
cmd.hasOption(GET_FILTERED_NAMED_GROUPING_POLICY) ? GET_FILTERED_NAMED_GROUPING_POLICY :
cmd.hasOption(HAS_POLICY) ? HAS_POLICY :
cmd.hasOption(HAS_NAMED_POLICY) ? HAS_NAMED_POLICY :
cmd.hasOption(ADD_POLICY) ? ADD_POLICY :
cmd.hasOption(ADD_POLICIES) ? ADD_POLICIES :
cmd.hasOption(ADD_NAMED_POLICY) ? ADD_NAMED_POLICY :
cmd.hasOption(ADD_NAMED_POLICIES) ? ADD_NAMED_POLICIES :
cmd.hasOption(REMOVE_POLICY) ? REMOVE_POLICY :
cmd.hasOption(REMOVE_POLICIES) ? REMOVE_POLICIES :
cmd.hasOption(REMOVE_FILTERED_POLICY) ? REMOVE_FILTERED_POLICY :
cmd.hasOption(REMOVE_NAMED_POLICY) ? REMOVE_NAMED_POLICY :
cmd.hasOption(REMOVE_NAMED_POLICIES) ? REMOVE_NAMED_POLICIES :
cmd.hasOption(REMOVE_FILTERED_NAMED_POLICY) ? REMOVE_FILTERED_NAMED_POLICY :
cmd.hasOption(HAS_GROUPING_POLICY) ? HAS_GROUPING_POLICY :
cmd.hasOption(HAS_NAMED_GROUPING_POLICY) ? HAS_NAMED_GROUPING_POLICY :
cmd.hasOption(ADD_GROUPING_POLICY) ? ADD_GROUPING_POLICY :
cmd.hasOption(ADD_GROUPING_POLICIES) ? ADD_GROUPING_POLICIES :
cmd.hasOption(ADD_NAMED_GROUPING_POLICY) ? ADD_NAMED_GROUPING_POLICY :
cmd.hasOption(ADD_NAMED_GROUPING_POLICIES) ? ADD_NAMED_GROUPING_POLICIES :
cmd.hasOption(REMOVE_GROUPING_POLICY) ? REMOVE_GROUPING_POLICY :
cmd.hasOption(REMOVE_GROUPING_POLICIES) ? REMOVE_GROUPING_POLICIES :
cmd.hasOption(REMOVE_FILTERED_GROUPING_POLICY) ? REMOVE_FILTERED_GROUPING_POLICY :
cmd.hasOption(REMOVE_NAMED_GROUPING_POLICY) ? REMOVE_NAMED_GROUPING_POLICY :
cmd.hasOption(REMOVE_FILTERED_NAMED_GROUPING_POLICY) ? REMOVE_FILTERED_NAMED_GROUPING_POLICY :
cmd.hasOption(UPDATE_POLICY) ? UPDATE_POLICY :
cmd.hasOption(LOAD_FILTERED_POLICY) ? LOAD_FILTERED_POLICY :
cmd.hasOption(UPDATE_GROUPING_POLICY) ? UPDATE_GROUPING_POLICY :
cmd.hasOption(UPDATE_NAMED_GROUPING_POLICY) ? UPDATE_NAMED_GROUPING_POLICY : null;
OperationHandle handle = handlers.get(option);
String[] params = cmd.getOptionValues(option);
String res = handle.handle(params);
enforcer.savePolicy();
System.out.println(res);
return res;
} catch (Exception e) {
System.out.println(e.getMessage());
formatter.printHelp("management", options);
}
return "";
}
private static Map<String, OperationHandle> getStringOperationHandleMap(NewEnforcer enforcer) {
Map<String, OperationHandle> handlers = new HashMap<>();
handlers.put(ENFORCE, params -> String.valueOf(enforcer.enforce(cutString(params[0]))));
handlers.put(ENFORCE_WITH_MATCHER, (params) -> String.valueOf(enforcer.enforceWithMatcher(params[0], cutString(params[1]))));
handlers.put(ENFORCE_EX, (params) -> String.valueOf(enforcer.enforceEx(cutString(params[0]))));
handlers.put(ENFORCE_EX_WITH_MATCHER, (params) -> String.valueOf(enforcer.enforceExWithMatcher(params[0], cutString(params[1]))));
handlers.put(BATCH_ENFORCE, (params) -> String.valueOf(enforcer.batchEnforce(parseNestedLists(params[0]))));
handlers.put(GET_ALL_SUBJECTS, (params) -> String.valueOf(enforcer.getAllSubjects()));
handlers.put(GET_ALL_NAMED_SUBJECTS, (params) -> String.valueOf(enforcer.getAllNamedSubjects(params[0])));
handlers.put(GET_ALL_OBJECTS, (params) -> String.valueOf(enforcer.getAllObjects()));
handlers.put(GET_ALL_NAMED_OBJECTS, (params) -> String.valueOf(enforcer.getAllNamedObjects(params[0])));
handlers.put(GET_ALL_ACTIONS, (params) -> String.valueOf(enforcer.getAllActions()));
handlers.put(GET_ALL_NAMED_ACTIONS, (params) -> String.valueOf(enforcer.getAllNamedActions(params[0])));
handlers.put(GET_ALL_ROLES, (params) -> String.valueOf(enforcer.getAllRoles()));
handlers.put(GET_ALL_NAMED_ROLES, (params) -> String.valueOf(enforcer.getAllNamedRoles(params[0])));
handlers.put(GET_POLICY, (params) -> String.valueOf(enforcer.getPolicy()));
handlers.put(GET_FILTERED_POLICY, (params) -> String.valueOf(enforcer.getFilteredPolicy(Integer.parseInt(params[0]), cutString(params[1]))));
handlers.put(GET_NAMED_POLICY, (params) -> String.valueOf(enforcer.getNamedPolicy(params[0])));
handlers.put(GET_FILTERED_NAMED_POLICY, (params) -> String.valueOf(enforcer.getFilteredNamedPolicy(params[0], Integer.parseInt(params[1]), cutString(params[2]))));
handlers.put(GET_GROUPING_POLICY, (params) -> String.valueOf(enforcer.getGroupingPolicy()));
handlers.put(GET_FILTERED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.getFilteredGroupingPolicy(Integer.parseInt(params[0]), cutString(params[1]))));
handlers.put(GET_NAMED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.getNamedGroupingPolicy(params[0])));
handlers.put(GET_FILTERED_NAMED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.getFilteredNamedGroupingPolicy(params[0], Integer.parseInt(params[1]), cutString(params[0]))));
handlers.put(HAS_POLICY, (params) -> String.valueOf(enforcer.hasPolicy(cutString(params[0]))));
handlers.put(HAS_NAMED_POLICY, (params) -> String.valueOf(enforcer.hasNamedPolicy(params[0], cutString(params[1]))));
handlers.put(ADD_POLICY, (params) -> String.valueOf(enforcer.addPolicy(cutString(params[0]))));
handlers.put(ADD_POLICIES, (params) -> String.valueOf(enforcer.addPolicies(parseNestedLists(params[0]))));
handlers.put(ADD_NAMED_POLICY, (params) -> String.valueOf(enforcer.addNamedPolicy(params[0], cutString(params[1]))));
handlers.put(ADD_NAMED_POLICIES, (params) -> String.valueOf(enforcer.addNamedPolicies(params[0], parseNestedLists(params[1]))));
handlers.put(REMOVE_POLICY, (params) -> String.valueOf(enforcer.removePolicy(cutString(params[0]))));
handlers.put(REMOVE_POLICIES, (params) -> String.valueOf(enforcer.removePolicies(parseNestedLists(params[0]))));
handlers.put(REMOVE_FILTERED_POLICY, (params) -> String.valueOf(enforcer.removeFilteredPolicy(Integer.parseInt(params[0]), cutString(params[1]))));
handlers.put(REMOVE_NAMED_POLICY, (params) -> String.valueOf(enforcer.removeNamedPolicy(params[0], cutString(params[1]))));
handlers.put(REMOVE_NAMED_POLICIES, (params) -> String.valueOf(enforcer.removeNamedPolicies(params[0], parseNestedLists(params[1]))));
handlers.put(REMOVE_FILTERED_NAMED_POLICY, (params) -> String.valueOf(enforcer.removeFilteredNamedPolicy(params[0], Integer.parseInt(params[1]), cutString(params[0]))));
handlers.put(HAS_GROUPING_POLICY, (params) -> String.valueOf(enforcer.hasGroupingPolicy(cutString(params[0]))));
handlers.put(HAS_NAMED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.hasNamedGroupingPolicy(params[0], cutString(params[1]))));
handlers.put(ADD_GROUPING_POLICY, (params) -> String.valueOf(enforcer.addGroupingPolicy(cutString(params[0]))));
handlers.put(ADD_GROUPING_POLICIES, (params) -> String.valueOf(enforcer.addGroupingPolicies(parseNestedLists(params[0]))));
handlers.put(ADD_NAMED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.addNamedGroupingPolicy(params[0], cutString(params[1]))));
handlers.put(ADD_NAMED_GROUPING_POLICIES, (params) -> String.valueOf(enforcer.addNamedGroupingPolicies(params[0], parseNestedLists(params[1]))));
handlers.put(REMOVE_GROUPING_POLICY, (params) -> String.valueOf(enforcer.removeGroupingPolicy(params[0])));
handlers.put(REMOVE_GROUPING_POLICIES, (params) -> String.valueOf(enforcer.removeGroupingPolicies(parseNestedLists(params[0]))));
handlers.put(REMOVE_FILTERED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.removeFilteredGroupingPolicy(Integer.parseInt(params[0]), cutString(params[1]))));
handlers.put(REMOVE_NAMED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.removeNamedGroupingPolicy(params[0], cutString(params[1]))));
handlers.put(REMOVE_FILTERED_NAMED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.removeFilteredNamedGroupingPolicy(params[0], Integer.parseInt(params[1]), cutString(params[0]))));
handlers.put(UPDATE_POLICY, (params) -> String.valueOf(enforcer.updatePolicy(parseOrdinary(params[0]), parseOrdinary(params[1]))));
//handlers.put(LOAD_FILTERED_POLICY, (params) -> String.valueOf(enforcer.loadFilteredPolicy()));
handlers.put(UPDATE_GROUPING_POLICY, (params) -> String.valueOf(enforcer.updateGroupingPolicy(parseOrdinary(params[0]), parseOrdinary(params[1]))));
handlers.put(UPDATE_NAMED_GROUPING_POLICY, (params) -> String.valueOf(enforcer.updateNamedGroupingPolicy(params[0], parseOrdinary(params[1]), parseOrdinary(params[2]))));
return handlers;
}
private static Options getOptions() {
Options options = new Options();
Option option = new Option("e", ENFORCE, false, "enforce access control");
option.setArgs(1);
options.addOption(option);
option = new Option("ewm", ENFORCE_WITH_MATCHER, false, "enforce access control with matcher");
option.setArgs(2);
options.addOption(option);
option = new Option("ex", ENFORCE_EX, false, "enforce access control exception");
option.setArgs(1);
options.addOption(option);
option = new Option("exwm", ENFORCE_EX_WITH_MATCHER, false, "enforce access control exception with matcher");
option.setArgs(2);
options.addOption(option);
option = new Option("be", BATCH_ENFORCE, false, "batch enforce access control");
option.setArgs(1);
options.addOption(option);
option = new Option("gas", GET_ALL_SUBJECTS, false, "get all subjects");
options.addOption(option);
option = new Option("gans", GET_ALL_NAMED_SUBJECTS, false, "get all named subjects");
option.setArgs(1);
options.addOption(option);
option = new Option("go", GET_ALL_OBJECTS, false, "get all objects");
options.addOption(option);
option = new Option("ganos", GET_ALL_NAMED_OBJECTS, false, "get all named objects");
option.setArgs(1);
options.addOption(option);
option = new Option("ga", GET_ALL_ACTIONS, false, "get all actions");
options.addOption(option);
option = new Option("ganas", GET_ALL_NAMED_ACTIONS, false, "get all named actions");
option.setArgs(1);
options.addOption(option);
option = new Option("grl", GET_ALL_ROLES, false, "get all roles");
options.addOption(option);
option = new Option("garnr", GET_ALL_NAMED_ROLES, false, "get all named roles");
option.setArgs(1);
options.addOption(option);
option = new Option("gp", GET_POLICY, false, "get policy");
options.addOption(option);
option = new Option("gfp", GET_FILTERED_POLICY, false, "get filtered policy");
option.setArgs(2);
options.addOption(option);
option = new Option("gnp", GET_NAMED_POLICY, false, "get named policy");
option.setArgs(1);
options.addOption(option);
option = new Option("gfnp", GET_FILTERED_NAMED_POLICY, false, "get filtered named policy");
option.setArgs(3);
options.addOption(option);
option = new Option("ggp", GET_GROUPING_POLICY, false, "get grouping policy");
options.addOption(option);
option = new Option("gfgp", GET_FILTERED_GROUPING_POLICY, false, "get filtered grouping policy");
option.setArgs(2);
options.addOption(option);
option = new Option("gnrp", GET_NAMED_GROUPING_POLICY, false, "get named grouping policy");
option.setArgs(1);
options.addOption(option);
option = new Option("gfngp", GET_FILTERED_NAMED_GROUPING_POLICY, false, "get filtered named grouping policy");
option.setArgs(3);
options.addOption(option);
option = new Option("hp", HAS_POLICY, false, "check if a policy exists");
option.setArgs(1);
options.addOption(option);
option = new Option("hnp", HAS_NAMED_POLICY, false, "check if a named policy exists");
option.setArgs(2);
options.addOption(option);
option = new Option("ap", ADD_POLICY, false, "add a policy");
option.setArgs(1);
options.addOption(option);
option = new Option("aps", ADD_POLICIES, false, "add multiple policies");
option.setArgs(0);
options.addOption(option);
option = new Option("anp", ADD_NAMED_POLICY, false, "add a named policy");
option.setArgs(2);
options.addOption(option);
option = new Option("ans", ADD_NAMED_POLICIES, false, "add multiple named policies");
option.setArgs(2);
options.addOption(option);
option = new Option("rp", REMOVE_POLICY, false, "remove a policy");
option.setArgs(1);
options.addOption(option);
option = new Option("rps", REMOVE_POLICIES, false, "remove multiple policies");
option.setArgs(1);
options.addOption(option);
option = new Option("rfp", REMOVE_FILTERED_POLICY, false, "remove a policy by filter");
option.setArgs(2);
options.addOption(option);
option = new Option("rnp", REMOVE_NAMED_POLICY, false, "remove a named policy");
option.setArgs(2);
options.addOption(option);
option = new Option("rnps", REMOVE_NAMED_POLICIES, false, "remove multiple named policies");
option.setArgs(2);
options.addOption(option);
option = new Option("rfnp", REMOVE_FILTERED_NAMED_POLICY, false, "remove a named policy by filter");
option.setArgs(3);
options.addOption(option);
option = new Option("hgp", HAS_GROUPING_POLICY, false, "check if a grouping policy exists");
option.setArgs(1);
options.addOption(option);
option = new Option("hnpgp", HAS_NAMED_GROUPING_POLICY, false, "check if a named grouping policy exists");
option.setArgs(2);
options.addOption(option);
option = new Option("agp", ADD_GROUPING_POLICY, false, "add a grouping policy");
option.setArgs(1);
options.addOption(option);
option = new Option("ags", ADD_GROUPING_POLICIES, false, "add multiple grouping policies");
option.setArgs(1);
options.addOption(option);
option = new Option("angp", ADD_NAMED_GROUPING_POLICY, false, "add a named grouping policy");
option.setArgs(2);
options.addOption(option);
option = new Option("angs", ADD_NAMED_GROUPING_POLICIES, false, "add multiple named grouping policies");
option.setArgs(2);
options.addOption(option);
option = new Option("agnex", REMOVE_GROUPING_POLICIES, false, "remove multiple grouping policies");
option.setArgs(1);
options.addOption(option);
option = new Option("rgp", REMOVE_GROUPING_POLICY, false, "remove a grouping policy");
option.setArgs(1);
options.addOption(option);
option = new Option("rgs", REMOVE_GROUPING_POLICIES, false, "remove multiple grouping policies");
option.setArgs(1);
options.addOption(option);
option = new Option("rgfp", REMOVE_FILTERED_GROUPING_POLICY, false, "remove a grouping policy by filter");
option.setArgs(2);
options.addOption(option);
option = new Option("rngp", REMOVE_NAMED_GROUPING_POLICY, false, "remove a named grouping policy");
option.setArgs(2);
options.addOption(option);
option = new Option("rnfngp", REMOVE_FILTERED_NAMED_GROUPING_POLICY, false, "remove a named grouping policy by filter");
option.setArgs(3);
options.addOption(option);
option = new Option("up", UPDATE_POLICY, false, "update a policy");
option.setArgs(2);
options.addOption(option);
option = new Option("lfp", LOAD_FILTERED_POLICY, false, "load a filtered policy");
options.addOption(option);
option = new Option("ugp", UPDATE_GROUPING_POLICY, false, "update a grouping policy");
option.setArgs(2);
options.addOption(option);
option = new Option("ungp", UPDATE_NAMED_GROUPING_POLICY, false, "update a named grouping policy");
option.setArgs(3);
options.addOption(option);
return options;
}
}