buildIncrementalRoleLinks method

void buildIncrementalRoleLinks(
  1. RoleManager rm,
  2. PolicyOperations op,
  3. List<List<String>> rules
)

Implementation

void buildIncrementalRoleLinks(
  RoleManager rm,
  PolicyOperations op,
  List<List<String>> rules,
) {
  this.rm = rm;
  var count = 0;

  for (var i = 0; i < value.length; i++) {
    if (value[i] == '_') {
      count++;
    }
  }

  if (count < 2) {
    throw ArgumentError(
        'the number of \"_\" in role definition should be at least 2');
  }

  for (var rule in rules) {
    if (rule.length < count) {
      throw ArgumentError(
          'grouping policy elements do not meet role definition');
    }
    if (rule.length > count) {
      rule = rule.sublist(0, count);
    }
    switch (op) {
      case PolicyOperations.PolicyAdd:
        rm.addLink(rule[0], rule[1], rule.sublist(2));
        break;
      case PolicyOperations.PolicyRemove:
        rm.deleteLink(rule[0], rule[1], rule.sublist(2));
        break;
      default:
        throw ArgumentError('invalid operation:' + op.toString());
    }
  }
}