219 $propertyEntityAllowedList = static::getPropertyEntityAllowedList();
220 $elementEntityAllowedList = static::getElementEntityAllowedList();
221 $allowedList = array_merge($elementEntityAllowedList, static::getAllowedList());
224 $chainReplacement = [];
227 foreach (
$fields as $definition)
230 if (in_array($definition, $allowedList,
true))
236 $chain = Chain::getChainByDefinition(
$entity, $definition);
237 $currentDefinition =
'';
239 $elements = $chain->getAllElements();
240 $lastElement = $chain->getLastElement();
242 foreach ($elements as $element)
244 $isLastElement = ($element === $lastElement);
247 if ($element->getValue() instanceof
ElementEntity && !$isLastElement)
256 if ($currentDefinition ===
'*' && $isLastElement)
258 $chainReplacement[$definition] = [];
260 foreach ($elementEntityAllowedList as $allowedFieldName)
262 if (
$entity->hasField($allowedFieldName))
264 $chainReplacement[$definition][] = $allowedFieldName;
272 if (!($element->getValue() instanceof
Field))
275 sprintf(
'Restricted field `%s`', $currentDefinition)
279 $currentField = $element->getValue();
280 $currentEntity = $currentField->getEntity();
286 if (in_array($currentField->getName(), $elementEntityAllowedList,
true))
292 if (!empty(class_uses($currentField)[PropertyRelation::class]))
297 $propEntity = $currentField->getRefEntity();
298 $chainReplacement[$definition] = [];
300 foreach ($propertyEntityAllowedList as $allowedFieldName)
302 if ($propEntity->hasField($allowedFieldName))
317 if (in_array($currentField->getName(), $propertyEntityAllowedList,
true))
325 $refEntity = $currentField->getRefEntity();
333 $chainReplacement[$definition] = [];
335 foreach ($elementEntityAllowedList as $allowedFieldName)
337 if ($refEntity->hasField($allowedFieldName))
351 sprintf(
'Restricted field `%s`', $currentDefinition)
357 foreach ($chainReplacement as $definition => $replacement)
374 foreach (
$filter->getConditions() as $condition)
379 $definitions = array_merge($definitions, static::getFilterDefinitions($condition));
384 if ($condition->getColumn() !==
null)
386 $definitions[] = $condition->getColumn();
390 $values = $condition->getValue();
391 if (!is_array($values))
396 foreach ($values as $subValue)
400 $definitions[] = $subValue->getDefinition();