Связи#
Позволяют создавать граф отношений между объектами системы и использовать его для гибкой настройки доступа пользователей к объектам.
Связи устанавливаются прикладным программистов в бизнес-правилах объекта.
Связь (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-движка) — возможность выполнить команду или произвести чтение;