Do not get context for rule evaluation as root

Since f2d4e71a704e the context must be computed for each rule so the loop must
be outside of the root context used to browse the rules (to avoid infinite
recursion)
This commit is contained in:
Cédric Krier
2023-10-07 14:49:07 +02:00
parent c03ee084ce
commit b0d1fc6946
+20 -19
View File
@@ -232,26 +232,27 @@ class Rule(ModelSQL, ModelView):
clause_global = defaultdict(lambda: ['OR'])
# Use root user without context to prevent recursion
with transaction.set_user(0), transaction.set_context(user=0):
for rule in cls.browse(ids):
decoder = PYSONDecoder(
cls._get_context(rule.rule_group.model.model))
assert rule.domain, ('Rule domain empty,'
'check if migration was done')
dom = decoder.decode(rule.domain)
target_model = rule.rule_group.model.model
if target_model in model2field:
target_dom = ['OR']
for field in model2field[target_model]:
target_dom.append((field, 'where', dom))
dom = target_dom
if rule.rule_group.global_p:
clause_global[rule.rule_group].append(dom)
else:
clause[rule.rule_group].append(dom)
rules = cls.browse(ids)
for rule in rules:
decoder = PYSONDecoder(
cls._get_context(rule.rule_group.model.model))
assert rule.domain, ('Rule domain empty,'
'check if migration was done')
dom = decoder.decode(rule.domain)
target_model = rule.rule_group.model.model
if target_model in model2field:
target_dom = ['OR']
for field in model2field[target_model]:
target_dom.append((field, 'where', dom))
dom = target_dom
if rule.rule_group.global_p:
clause_global[rule.rule_group].append(dom)
else:
clause[rule.rule_group].append(dom)
if no_rules:
group_id = no_rules[0]
clause[RuleGroup(group_id)] = []
if no_rules:
group_id = no_rules[0]
clause[RuleGroup(group_id)] = []
return clause, clause_global