Администрирование 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#

Используется чтобы включить проверку всех ролевых ограничений при выполнении JEXL-скриптов. Без этого флага настройки доступа к API, пакетам, классам и таблицам игнорируются, и скрипты выполняются без контроля прав.

Примечание

Безопасный диалект применяется только к прямым вызовам — например, из дебаггера, специальных форм или REST-пакетов. Технические (фоновые) вызовы проверку не проходят.

Для включения безопасного диалекта:

  1. Откройте приложение Настройки системы.

  2. Перейдите:
    Настройки и сервисы - Настройки модулей системы - Общие настройки модулей.

  3. В разделе модуля btk - Администрирование - JEXL включите флаг: Выполнение JEXL-скриптов через безопасный диалект.

После включения система начинает применять следующие ролевые настройки:

  • доступ к API и пакетам;

  • разрешения на классы и пакеты Java/Scala;

  • права на SQL-запросы к таблицам.

Сам по себе безопасный диалект не настраивается на уровне ролей — он либо включён, либо выключен глобально.

Доступ к API и пакетам из JEXL#

Используется чтобы разрешить вызов конкретных методов API или пакетов (Pkg) из JEXL-скриптов в зависимости от роли пользователя.

Настройка доступа к API

  1. В карточке роли перейдите на закладку: Серверные полномочия - Доступ к API.

  2. Найдите нужный API.

  3. В разделе «Права на вызов методов из JEXL», выберите методы и проставьте галочки Имеется право.

  4. Для полного доступа ко всем методам API установите флаг: Доступны все методы API через JEXL.

Настройка доступа к пакетам (Pkg)

Аналогично — на закладке Доступ к пакетам.

Доступ к Api

Разрешения JEXL на классы и пакеты Java/Scala#

Используется чтобы разрешить использование сторонних Java/Scala-классов (не входящих в бизнес-модель GlobalERP) в JEXL-скриптах.

Такие классы могут использоваться, например, для работы с утилитами, внешними библиотеками или кастомной логикой.

Настройка выполняется в карточке роли на закладке Разрешения JEXL.

Выдача прав на пакет

Укажите тип привилегии package и в поле имени — полное имя пакета (например, com.example.utils).
Это даёт доступ ко всем классам внутри пакета из JEXL-скрипта.

Выдача прав на класс

Укажите тип привилегии class и в поле имени — полное имя класса (например, com.example.utils.Helper).
Чтобы разрешить только определённые методы, укажите их названия в поле Методы в виде JSON-массива:

["method1", "method2"]

Если нужно разрешить все методы, кроме указанных, установите флаг «Указанные методы исключающие».

Разрешения Jexl

Настройка прав на таблицы в SQL-запросах#

Используется чтобы определять, к каким таблицам и с какими операциями (SELECT, INSERT, UPDATE, DELETE) может обращаться пользователь через SQL-запросы в JEXL.

Чтобы настроить права пользователя:

  1. В карточке роли перейдите на закладку Доступ к таблицам в SQL запросах.

  2. Найдите нужную таблицу.

  3. Установите права с помощью чекбоксов (слева направо):

    • Select — чтение;

    • Update — изменение;

    • Delete — удаление;

    • Insert — вставка.

Примечание

Права на Insert можно выдать только для таблиц в схемах: public, aud, global_dev, global_system.

Внимание

Права на Select могут быть получены при наличии любой не запрещающей привилегии на администрируемом объекте, соответствующем данной таблице.