Ограничения (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
, которые они создали сами.