Использование псевдонимов в RQL-выражениях для работы с объектами доменов
В данном разделе описано использование псевдонимов при настройке правил данных и политик доступа.
Псевдонимы — это именованные ссылки на объекты, атрибуты или результаты вычисления функций, которые могут использоваться в RQL-выражениях.
|
В данном разделе при описании RQL-выражений приняты следующие соглашения:
|
Системные псевдонимы
Системные псевдонимы используются для обращения к специальным значениям в RQL. Все системные псевдонимы начинаются с символа @.
Объекты домена
Текущий объект (@doc)
Псевдоним @doc представляет текущий объект, участвующий в выражении. Этот псевдоним позволяет обращаться к атрибутам текущего объекта в компонентах WHERE, JOIN … ON, вложенных выражениях и функциях.
Текущая строка таблицы (@row)
Псевдоним @row используется при работе с атрибутами типа Table и представляет текущую строку таблицы. Позволяет обращаться к столбцам внутри этой строки при описании правил данных.
Примеры
condition: !rql |
@row.tableEnum1 = 'monday'
Правило с таким условием выполняется, если в столбце tableEnum1 текущей строки указано "monday".
condition: !rql |
CAST(@row.tableTimestamp, 'Timestamp') > @CurrentDateTime
Правило с таким условием выполняется, если в столбце tableTimestamp указано более позднее время, чем текущее. Используется приведение типа значения в столбце с помощью функции CAST() и псевдоним @CurrentDateTime.
Текущий элемент массива или строки таблицы (@index)
Псевдоним @index используется при работе с атрибутами типов Table и Array. Содержит индекс текущего элемента массива или строки таблицы. Нумерация элементов начинается с нуля. Таким образом, в массиве из n элементов первый элемент имеет индекс array[0], а последний — array[n-1].
condition: !rql
@index = 0
Правило с этим условием будет выполнено только для первого элемента массива или первой строки таблицы.
Идентификатор перечисления
В псевдонимах вида @<enum_id.enum_value_id> указываются:
-
<enum_id>— идентификатор перечисления, определенного в схеме домена; -
<enum_value_id>— идентификатор значения в перечислении.
Система подставит конкретное значение при выполнении RQL-выражения.
Примеры
Допустим, в схеме домена определено перечисление enumIocTypes:
dataTypes:
- id: enumIocTypes
name: Типы индикаторов компрометации
dataType: Enum
values:
- id: Account
name: Аккаунт
- id: File
name: Файл
...
condition: !rql iocType = @enumIocTypes.Account
Правило с этим условием будет применено, если значение атрибута iocType текущего объекта равно значению "Аккаунт" перечисления "Типы индикаторов компрометации".
expression: !rql SELECT ARRAY(@enumIocTypes.Account, @enumIocTypes.File)
В данном примере функция ARRAY() используется, чтобы сформировать список допустимых значений из элементов перечисления. Атрибут объекта, на который действует эффект правила, может иметь одно из значений перечисления "Типы индикаторов компрометации" — "Аккаунт" или "Файл".
Идентификатор рабочего процесса
В псевдонимах вида @<workflow_id.workflow_status_id> указываются:
-
<workflow_id>— идентификатор рабочего процесса, определенного в схеме домена, -
<workflow_status_id>— идентификатор статуса рабочего процесса.
Система подставит конкретное значение при выполнении RQL-выражения.
Текущие дата и время
@CurrentTimestamp (@CurrentDateTime)
Псевдонимы @CurrentTimestamp и @CurrentDateTime равнозначны и возвращают текущее значение даты и времени с точностью до миллисекунд.
@CurrentDate
Псевдоним @CurrentDate возвращает текущую дату.
При сравнении рекомендуется указывать дату в формате YYYY-MM-DD, например:
@CurrentDate >= '2025-09-01'
@CurrentTime
Псевдоним @CurrentTime возвращает текущее время в формате типа TIME.
Для корректного сравнения может потребоваться явное приведение типа с помощью функции CAST():
@CurrentTime <= CAST('20:00', 'Time')
Данные текущего пользователя (@CurrentUser)
Псевдоним @CurrentUser используется для обращения к данным текущего аутентифицированного пользователя.
Доступны следующие варианты использования:
-
@CurrentUser— ссылка на объект текущего пользователя. Используется для сравнения с полями типа Референс (Reference) или полемcreatedBy. -
@CurrentUser.id— идентификатор текущего пользователя.При сравнении с полем
createdByважно учитывать типы операндов и их порядок. Допустимы следующие варианты синтаксиса:-
createdBy = CurrentUser.id; -
@CurrentUser = @doc.createdBy.
-
-
@CurrentUser.username— имя текущего пользователя.
expression: !rql SELECT @CurrentUser.username
В данном RQL-выражении в качестве значения атрибута по умолчанию устанавливается имя текущего пользователя.
Для проверки ролей пользователя используйте функцию hasRole().
|
Пользовательские псевдонимы (оператор AS)
При описании формата результата могут использоваться различные выражения, включая арифметические операции и встроенные функции. Чтобы использовать результат такого выражения, ему нужно присвоить псевдоним:
SELECT <expression> AS alias_name
Псевдонимы могут использоваться в операторах связывания JOIN alias_name ON …, условиях WHERE alias_name… и функциях someFunc(alias_name).
SELECT LENGTH(`objectString`) AS len
Здесь результату функции LENGTH() присваивается псевдоним len.
Была ли полезна эта страница?