Администрирование JEXL#
В статье описаны механизмы администрирования JEXL: управление доступом к скриптам, API, пакетам, классам и таблицам, настройка безопасного диалекта и ведение журнала доступа. Информация предназначена для системных администраторов и разработчиков.
Администрирование JEXL позволяет настраивать доступ пользователей к функционалу и данным, обеспечивать безопасность и контролировать выполнение JEXL-скриптов и SQL-запросов.
Используется чтобы разрешить пользователям выполнять скрипты и обращаться из них к API, пакетам, классам и таблицам в соответствии с их ролями.
Варианты вызова JEXL#
В системе JEXL-скрипты могут запускаться двумя способами: технически или напрямую.
Технический вызов — скрипт выполняется автоматически в рамках системных процессов (фоновый вызов). Эти вызовы не администрируются, права на них не настраиваются.
Например, при выполнении бизнес-процесса система запускает привязанные к его этапам JEXL-скрипты. Пользователь не инициирует такой вызов, не видит его и не может повлиять на него.Прямой вызов — скрипт запускается явно, пользователем или через внешний интерфейс. Такие вызовы подлежат администрированию. Доступ к ним определяется настройками ролей.
Прямое выполнение возможно через:специальные формы выполнения JEXL;
дебаггер;
REST-пакеты;
консоль WebSocket;
SOAP-сервисы;
библиотеки скриптов.
Принципы администрирования и управление привилегиями#
Администрирование JEXL строится на управлении ролями. Для каждой роли определяется, какие JEXL-скрипты, API, пакеты и таблицы ей доступны, что позволяет централизованно контролировать доступ к функционалу и данным без привязки к отдельным пользователям.
На практике работа с привилегиями обычно следует одному из двух подходов:
Настройка на основе модели доступа — изначально формируется матрица ролей с чёткими правами. Все новые пользователи получают доступ через назначение одной из этих ролей; это основной и рекомендуемый способ.
Настройка на основе анализа аудита — сначала включается аудит, выявляются нарушения или несанкционированные обращения, после чего права корректируются. Такой подход применяется при аудите существующей системы или расследовании инцидентов.
Большинство настроек касаются UI-сущностей — например, доступ к формам, дебаггеру или специальным страницам выполнения скриптов. Однако администрированию подлежит и серверная часть:
вызовы API из JEXL;
использование REST-пакетов;
обращение к внутренним Java/Scala-классам.
Все эти компоненты настраиваются централизованно через карточки ролей.
Журнал доступа к объектам системы#
Для контроля и анализа обращений из JEXL-скриптов используется журнал доступа к объектам системы. Он фиксирует в аудите, к каким именно объектам (API, таблицам, классам) обращался скрипт при прямом выполнении, что позволяет выявлять несанкционированные попытки доступа, проверять корректность настроек ролей и расследовать инциденты.
Журнал не включён по умолчанию. Чтобы включить его, необходимо в приложении «Настройки системы» перейти в: Настройки и сервисы > Настройки модулей системы > Общие настройки модулей > модуль btk > Администрирование > JEXL и включить флаг «Заполнять журнал доступа к объектам системы через JEXL».
В журнал попадают только прямые вызовы — например, выполнение скрипта в дебаггере, через REST-пакет или специальную форму. Технические (фоновые) вызовы в аудит не записываются.
Просмотреть записи журнала можно в приложении Настройки системы: Аудит - Аудит JEXL.

Безопасный диалект JEXL#
Используется чтобы включить проверку всех ролевых ограничений при выполнении JEXL-скриптов. Без этого флага настройки доступа к API, пакетам, классам и таблицам игнорируются, и скрипты выполняются без контроля прав.
Примечание
Безопасный диалект применяется только к прямым вызовам — например, из дебаггера, специальных форм или REST-пакетов. Технические (фоновые) вызовы проверку не проходят.
Для включения безопасного диалекта:
Откройте приложение Настройки системы.
Перейдите:
Настройки и сервисы-Настройки модулей системы-Общие настройки модулей.В разделе модуля btk - Администрирование - JEXL включите флаг: Выполнение JEXL-скриптов через безопасный диалект.
После включения система начинает применять следующие ролевые настройки:
доступ к API и пакетам;
разрешения на классы и пакеты Java/Scala;
права на SQL-запросы к таблицам.
Сам по себе безопасный диалект не настраивается на уровне ролей — он либо включён, либо выключен глобально.
Доступ к API и пакетам из JEXL#
Используется чтобы разрешить вызов конкретных методов API или пакетов (Pkg) из JEXL-скриптов в зависимости от роли пользователя.
Настройка доступа к API
В карточке роли перейдите на закладку:
Серверные полномочия-Доступ к API.Найдите нужный API.
В разделе «Права на вызов методов из JEXL», выберите методы и проставьте галочки Имеется право.
Для полного доступа ко всем методам API установите флаг: Доступны все методы API через JEXL.
Настройка доступа к пакетам (Pkg)
Аналогично — на закладке Доступ к пакетам.

Разрешения JEXL на классы и пакеты Java/Scala#
Используется чтобы разрешить использование сторонних Java/Scala-классов (не входящих в бизнес-модель GlobalERP) в JEXL-скриптах.
Такие классы могут использоваться, например, для работы с утилитами, внешними библиотеками или кастомной логикой.
Настройка выполняется в карточке роли на закладке Разрешения JEXL.
Выдача прав на пакет
Укажите тип привилегии package и в поле имени — полное имя пакета (например, com.example.utils).
Это даёт доступ ко всем классам внутри пакета из JEXL-скрипта.
Выдача прав на класс
Укажите тип привилегии class и в поле имени — полное имя класса (например, com.example.utils.Helper).
Чтобы разрешить только определённые методы, укажите их названия в поле Методы в виде JSON-массива:
["method1", "method2"]
Если нужно разрешить все методы, кроме указанных, установите флаг «Указанные методы исключающие».

Настройка прав на таблицы в SQL-запросах#
Используется чтобы определять, к каким таблицам и с какими операциями (SELECT, INSERT, UPDATE, DELETE) может обращаться пользователь через SQL-запросы в JEXL.
Чтобы настроить права пользователя:
В карточке роли перейдите на закладку Доступ к таблицам в SQL запросах.
Найдите нужную таблицу.
Установите права с помощью чекбоксов (слева направо):
Select — чтение;
Update — изменение;
Delete — удаление;
Insert — вставка.
Примечание
Права на Insert можно выдать только для таблиц в схемах: public, aud, global_dev, global_system.
Внимание
Права на Select могут быть получены при наличии любой не запрещающей привилегии на администрируемом объекте, соответствующем данной таблице.