5.8.8. Ограничения для атрибутов-коллекций
Рассмотрим следующую ситуацию:
-  Модель данных содержит сущности OrderиOrderLine, образующие one-to-many композицию.
-  Некоторый REST-клиент загружает экземпляр Orderвместе с вложенной коллекцией экземпляровOrderLine.
-  Существуют ограничения безопасности, которые отфильтровывают некоторые экземпляры OrderLineтак, что клиент не загружает их и не знает об их существовании. Допустим, строкаline5не загружена клиентом, но существует в базе данных.
-  Если клиент удаляет из коллекции некоторую строку, скажем, line2, и сохраняет всю композицию с помощью запроса на/entities/{entityName}/{entityId}, то возможны два исхода:-  Если ограничения не были изменены с момента загрузки объектов, фреймворк восстанавливает отфильтрованный элемент коллекции line5и удаляет толькоline2, что является корректным поведением.
-  Если ограничения были изменены таким образом что line5стал доступным клиенту, фреймворк не может корректно восстановить информацию об отфильтрованных элементах коллекции. В результате будут удалены оба элемента:line2иline5.
 
-  
Если в вашем приложении подобная ситуация возможна, то избежать потери данных можно путем пересылки в JSON специального системного атрибута. Данный атрибут имеет имя __securityToken и автоматически включается в результирующий JSON если свойство приложения cuba.rest.requiresSecurityToken установлено в true. В этом случае в обязанности вашего REST-клиента входит передача этого атрибута обратно при сохранении сущности.
Пример JSON сущности с включенным security token:
{
  "id": "fa430b56-ceb2-150f-6a85-12c691908bd1",
  "number": "OR-000001",
  "items": [
    {
      "id": "82e6e6d2-be97-c81c-c58d-5e2760ae095a",
      "description": "Item 1"
    },
    {
      "id": "988a8cb5-d61a-e493-c401-f717dd9a2d66",
      "description": "Item 2"
    }
  ],
  "__securityToken": "0NXc6bQh+vZuXE4Fsk4mJX4QnhS3lOBfxzUniltchpxPfi1rZ5htEmekfV60sbEuWUykbDoY+rCxdhzORaYQNQ=="
}Атрибут __securityToken содержит закодированные идентификаторы отфильтрованных экземпляров, так что фреймворк всегда может восстановить необходимую информацию независимо от изменений в настройках ограничений.