Ограничения (Constraints) дают возможность ограничить доступ к определенным экземплярам сущностей (записям таблиц).
Ограничения задаются для класса сущности с помощью фрагментов выражений на языке JPQL. Эти фрагменты затем подставляются в запросы каждый раз при выборке списка экземпляров данной сущности, тем самым фильтруя их.
Пользователь получает список ограничений от всех групп начиная со своей и вверх по иерархии. Тем самым реализуется принцип: чем ниже пользователь в иерархии групп, тем больше у него ограничений.
Для создания ограничения в экране выберите группу, на которую нужно наложить ограничение, перейдите на вкладку Constraints и нажмите :

Далее выберите сущность в выпадающем списке Entity Name и задайте ограничение в полях Join Clause и Where Clause.
Редактор JPQL в полях Join Clause и Where Clause поддерживает автодополнение имен сущностей и их атрибутов. Для вызова автодополнения нажмите Ctrl+Space. Если вызов произведен после точки, будет выведен список атрибутов сущности, соответствующей контексту, иначе - список всех сущностей модели данных.
Правила формирования ограничения:
-
В качестве алиаса извлекаемой сущности необходимо использовать строку
{E}. При выполнении запросов она будет заменена на реальный алиас, заданный в запросе. -
В параметрах JPQL можно использовать следующие предопределенные константы:
-
session$userLogin− имя учетной записи текущего пользователя (в случае замещения − имя учетной записи замещаемого пользователя). -
session$userId− ID текущего пользователя (в случае замещения − ID замещаемого пользователя). -
session$userGroupId− ID группы текущего пользователя (в случае замещения − ID группы замещаемого пользователя). -
session$XYZ− произвольный атрибут текущей пользовательской сессии, где XYZ − имя атрибута.
-
-
Содержимое поля Where Clause добавляется в выражение
whereзапроса по условиюand(И). Само словоwhereписать не нужно, оно будет добавлено автоматически, даже если исходный запрос его не содержал. -
Содержимое поля Join Clause добавляется в выражение
fromзапроса. Оно должно начинаться с запятой или словjoinилиleft join.
Простейший пример ограничения приведен на рисунке выше: пользователи с данным ограничением будут видеть только те экземпляры
сущности library$BookPublication, которые они создали сами.

