Связи#

Позволяют создавать граф отношений между объектами системы и использовать его для гибкой настройки доступа пользователей к объектам.

Связи устанавливаются прикладным программистов в бизнес-правилах объекта.

Связь (Relation)#

Является объектом на уровне графовой базы Neo4j.

  • id (Идентификатор связи на уровне Neo4j)

  • start (Узел в neo4j, из которого выходит связь)

  • end (Узел в neo4j, в который входит связь)

  • relationId (Идентификатор связи, который задаётся клиентским приложеним, необходимо для подготовки клиент-серверного взаимодействия к оффлайн режиму работы)

  • relationType (Тип данной связи)

  • archived (При попытке удаления связи путём запросов к контексту связей происходит её архивация)

  • payload (Произвольные данные в json формате, хранящиеся внутри связи)

Типы связей (Relation types)#

На данный момент имеются следующие типы связей:

  • ASSIGNED_TO - связь, отображающая назначение пользователя на произвольную сущность

  • CHILD_OF - связь, отображающая принадлежность объекта некоему объекту на уровень выше. На данный момент актуальна только для УС, планируется её удаление и переход к связи PARENT

  • PARENT - связь, отображающая отношение “является родителем” между двумя сущностями

  • OWNER - связь между пользователем и произвольной сущностью, отражающая факт владения пользователем данной сущностью. В основном используется для отображения того факта, что пользователь является создателем данной сущности

  • RELATED_TO - связь, обозначающая произвольное отношение между двумя сущностями. Используется в том случае, когда нам не важно в каком отношении находятся сущности, но необходима связь между ним и

  • HAS_ATTACHMENT - связь между неким аттачментом и произвольной сущностью в системе. По большей степени актуальна для УС

Связь ASSIGNED_TO#

Помимо стандартных атрибутов связи имеет поле roles (Список идентификаторов ролей пользователя). Данное поле используется для реализации Графовых прав.

Типы прав#

  • Access (проверяется на графе) — возможность принципиального доступа до сущности Например, если есть доступ, то вся сущность грузится в оффлайн-хранилище или к ней может пройти запрос или команда;

  • Permissions (проверяются с помощью хуков или ABAC-движка) — возможность выполнить команду или произвести чтение;