def set_rules(self, rules, really=False): rules = json.loads(rules) rule_objects = [] log.debug(rules) log.debug(really) def listify(rule, field): if field not in rule: rule[field] = [] elif not isinstance(r[field], list): rule[field] = [rule[field]] for r in rules: grant = r['grant'] == "true" inverse = r['inverse'] == "true" if r['type'] == "list": listify(r, 'names') cls = ACLList.target_class(r['kind']) ids = [ cls.objects(name=name).first().identifier for name in r['names'] ] rule_objects.append( ACLList(grant=grant, inverse=inverse, kind=r['kind'], ids=ids)) elif r['type'] == "key": rule_objects.append( ACLKey(grant=grant, inverse=inverse, kind=r['kind'])) elif r['type'] == "title": listify(r, 'titles') rule_objects.append( ACLTitle(grant=grant, inverse=inverse, titles=r['titles'])) elif r['type'] == "role": listify(r, 'roles') rule_objects.append( ACLRole(grant=grant, inverse=inverse, roles=r['roles'])) elif r['type'] == "mask": rule_objects.append( ACLMask(grant=grant, inverse=inverse, mask=r['mask'])) log.debug(rule_objects) if not really: log.debug("not really") return "json:", "\n".join( [r.human_readable_repr() for r in rule_objects]) log.debug("really!") self.group.rules = rule_objects success = self.group.save() log.debug(success) if success: return 'json:', dict(success=True) return 'json:', dict(success=True, message=_("unimplemented"))
def set_rules(self, rules, really=False): rules = json.loads(rules) rule_objects = [] log.debug(rules) log.debug(really) def listify(rule, field): if field not in rule: rule[field] = [] elif not isinstance(r[field], list): rule[field] = [rule[field]] for r in rules: grant = r['grant'] == "true" inverse = r['inverse'] == "true" if r['type'] == "list": listify(r, 'names') cls = ACLList.target_class(r['kind']) ids = [cls.objects(name=name).first().identifier for name in r['names']] rule_objects.append(ACLList(grant=grant, inverse=inverse, kind=r['kind'], ids=ids)) elif r['type'] == "key": rule_objects.append(ACLKey(grant=grant, inverse=inverse, kind=r['kind'])) elif r['type'] == "title": listify(r, 'titles') rule_objects.append(ACLTitle(grant=grant, inverse=inverse, titles=r['titles'])) elif r['type'] == "role": listify(r, 'roles') rule_objects.append(ACLRole(grant=grant, inverse=inverse, roles=r['roles'])) elif r['type'] == "mask": rule_objects.append(ACLMask(grant=grant, inverse=inverse, mask=r['mask'])) log.debug(rule_objects) if not really: log.debug("not really") return "json:", "\n".join([r.human_readable_repr() for r in rule_objects]) log.debug("really!") self.group.rules = rule_objects success = self.group.save() log.debug(success) if success: return 'json:', dict(success=True) return 'json:', dict(success=True, message=_("unimplemented"))
def check_rule_reference_exists(self, kind, name): cls = ACLList.target_class(kind) return "json:", dict(exists=bool(cls.objects(name=name)))