Версия 1.36.0
В этой версии мы повысили безопасность работы с файлами и надежность авторизации при интеграции с внешними системами. Доступ к файлам в облачных хранилищах теперь лучше защищен, а пользователи могут продолжать работу без повторной авторизации при длительных сессиях. Также обновили технологию построения отчетов, чтобы снизить затраты на использование коммерческих компонентов.
Мы также улучшили работу со списками. Теперь вы можете:
- настраивать заголовки для колонок, выведенных через dot-walking;
- делиться ссылками на списки с примененными фильтрами.
Помимо этого, усилили защиту входа и обновили сторонние компоненты, устранили проблемы с установкой больших пакетов, ошибки в работе индикаций и фильтрации списков.
Новая функциональность
Защищенный доступ к вложениям и изображениям
Загрузка и скачивание вложений и изображений теперь осуществляются через отдельный сервис платформы. Клиентские приложения больше не обращаются к хранилищу файлов напрямую, а внутренние адреса хранилища скрыты. При просмотре и скачивании вложений проверяются права доступа (ACL).
Основные возможности:
- Действие Скачать все формирует архив даже при ошибках скачивания отдельных файлов, в этом случае формируются дополнительные файлы с именем исходного файла и текстом ошибки.
- Просмотр и скачивание вложений выполняются после проверки ACL. Публичные вложения доступны без авторизации.
- Все новые вложения по умолчанию сохраняются в приватном хранилище attachment/.
Для управления проверкой ACL в сервисе доступа к файлам добавили системное свойство platform.attachments.acl.enabled. По умолчанию свойство включено.
Ротация токенов базовой авторизации
В класс SimpleSession добавили новый метод rotateToken(), который обеспечивает бесшовное продление сессии без повторной аутентификации. Метод доступен для вызова через Scripted REST API авторизованным пользователям.
При вызове rotateToken() система проверяет, что пользователь аутентифицирован, текущий токен действителен, а оставшееся время до истечения не превышает значение системного свойства simple.session.token_rotation_window. Если все проверки пройдены, система генерирует новый токен, привязывает его к той же сессии, аннулирует старый токен в API Gateway и устанавливает новый токен в cookie auth.
В системном свойстве simple.session.token_rotation_window вы можете определить интервал в секундах до истечения токена, в течение которого разрешена ротация. Значение должно быть положительным целым числом и не превышать PHP_INT_MAX. Значение по умолчанию – 3600 секунд (60 минут).
Улучшения
Настраиваемые заголовки в списках
Теперь администратор системы может настраивать заголовки колонок, выведенных на представление списка через dot-walking. Это позволяет сделать списки более удобными для восприятия и давать колонкам списка заголовки, которые точно отражают их содержимое. Если настраиваемый заголовок не задан, в списке используется заголовок последнего поля цепочки. Слева от заголовка отображается иконка, при нажатии на которую открывается подсказка с полным путем к полю и возможностью его скопировать. При экспорте в формате XLSX используются настроенные заголовки (если заданы), иначе – системные.
Настраиваемые заголовки хранятся в таблице Колонки списков (sys_ui_list_column) в новой колонке Настраиваемый заголовок, доступной для редактирования только пользователям с ролью admin.
Читайте подробнее в статье Представление списка.
Параметр filter_id в URL-адресах списков
Для URL-адресов списков записей таблиц добавили параметр filter_id, благодаря которому вы можете делиться ссылками на списки записей таблицы с примененным сохраненным фильтром. При открытии ссылки с filter_id, соответствующий фильтр применяется к списку и отображается в поле выбора фильтра конструктора условий.
Если URL содержит как filter_id, так и condition, параметр condition игнорируется. При выборе сохраненного фильтра в конструкторе условий, параметр filter_id автоматически добавляется в URL. Если условия фильтра были изменены и не сохранены, то при нажатии Применить параметр filter_id удаляется из URL и заменяется обновленным параметром condition.
Настройка предела пересчета индикаций через системное свойство
Системное свойство slm.calculation.max.actual_elapsed_percentage теперь поддерживается модулем SLA, благодаря чему администраторы могут задавать максимальный процент просрочки для автоматического пересчета индикаций. Система продолжает пересчет значений индикации до достижения указанного процента. Значение по умолчанию – 1100%.
Системные улучшения
Версионируемые таблицы
Таблицы Тип отчета (sys_report_type) и Категория типа отчёта (sys_report_type_category) стали версионируемыми.
Перенос времени пересчета индикаций
Мы добавили механизм, который корректирует время следующего пересчета индикаций после возобновления работы микросервиса Indication calculator, например, после обновления или технического сбоя. Механизм переносит пересчеты на более раннее или позднее время, чтобы равномернее распределить обработку индикаций, накопившихся за время простоя, и избежать избыточной нагрузки на систему.
Замена библиотеки визуализации отчетов на ECharts
В механизме визуализации отчетов мы заменили проприетарную библиотеку Highcharts.js на открытую ECharts. Это изменение направлено на повышение стабильности работы отчетов и расширение возможностей их дальнейшего развития. Все существующие типы визуализаций отображаются корректно, паттерны взаимодействия пользователя с визуализациями сохранены. Ранее созданные отчеты продолжают корректно функционировать без изменений в логике работы.
Исправления
Безопасность
- DEF0023378: Усилена проверка ответов поставщика удостоверений при входе через SAML (SSO). Если в вашей инсталляции настроен вход через SAML, рекомендуем установить обновление в приоритетном порядке.
- DEF0022591: Обновлены сторонние компоненты в образе frontend/spa-frontend: закрыты известные уязвимости из бюллетеней поставщиков.
- DEF0022579: Обновлены сторонние компоненты в образе kafka/simple-cp-schema-registry: закрыты известные уязвимости из бюллетеней поставщиков.
- DEF0020123: Исправлена возможность экспорта недоступных записей (включая записи вендора) через экспорт JSON. Теперь при экспорте выполняется проверка ACL – экспортируются только записи, доступные пользователю на чтение.
При необходимости обратитесь в службу поддержки, чтобы получить перечень устраненных уязвимостей.
Доступность и обновление
- DEF0022750: Токен в cookie auth при авторизации через Keycloak не обновлялся. Проблема возникала, когда был указан недействительный токен. В этом случае происходила циклическая пересылка между URI экземпляра и страницей /auth-sso/keycloak. Теперь некорректная cookie авторизации удаляется, и токен обновляется.
Целостность данных
- DEF0022713: При формировании исходящих писем, в том числе приглашений на собрание (iCalendar), платформа не могла использовать поле Тип данных (MIME) (content_type) в таблице Электронная почта (sys_email): оно было удалено в предыдущих версиях. Поле восстановлено, ограничение на его длину снято.
- DEF0022120: GET-запрос к полю типа List через dot-walking возвращал исключение, если в поле было указано более одной записи. Ошибка возникала из-за того, что передаваемый конструктору класса параметр dwaRecordId для колонки типа List содержал строку (string) со списком ID (sys_id) вместо ожидаемого целочисленного значения (integer). В этой версии проблема устранена.
- DEF0020622: При фильтрации записей с помощью dot-walking по ссылочным полям возникала ошибка "Некорректный атрибут в условии". Проблема возникала из-за некорректной передачи записи в сервис ACL при обновлении таблицы в GetReferenceValueService. В этой версии механизм ACL дополнен, поиск записей с использованием фильтра работает корректно.
- DEF0016612: Фильтр по значениям списка сравнивал строку целиком, а не отдельные значения, поэтому результат зависел от порядка значений. Например, в поле Участники со значениями
Иванов, Петровфильтр включает Петров и Иванов не находил запись, а со значениямиПетров, Иванов– находил. Теперь значения сравниваются по отдельности. Для динамических операторов содержит (динамическое) и не содержит (динамическое) теперь учитываются все значения динамического фильтра, а не только первое.
Индикаторы и индикации
- DEF0022221: Записи индикаций не создавались, если в условиях индикатора их запуск должен был вызваться оператором изменяется. Проблема возникала из-за того, что для новой записи параметр previous заполнялся текущим состоянием из БД, из-за чего он совпадал с current и оператор изменяется не срабатывал. В этой версии механизм индикаций исправлен.
- DEF0018802: Индикации для индикаторов с условием "Когда создано до [дата из прошлого]" создавались в том числе и для записей с более поздней датой. Проблема была связана с форматом передаваемых дат при запросе из микросервиса в condition-api. В этой версии создание записей индикаций происходит корректно.