rpa 26.400.0 Безопасность

Rpa 26.400.0: единая проверка прав на элементы и задания

4 мин чтения
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

Обновление безопасности

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

RPA 26.400.0 меняет серверные проверки доступа к элементам, заданиям и Pull-событиям. Обновление нужно учесть в своих контроллерах, обработчиках канбана и ссылках на создание типа: прежние допущения о правах больше не работают.

Новое

Проверяйте право на конкретное действие

UserPermissions::canViewItem() теперь учитывает сохранённых автора и переместившего элемент пользователя, администратора портала, право менять тип, явные права стадии и участие в задании, на которое этот пользователь ещё не ответил. Фильтр getFilterForViewableItems() работает по тем же правилам, поэтому список и отдельная карточка не должны расходиться по доступности.

Для более точных проверок появились canModifyItem(), canMoveItemFromStage() и canViewItemWithTaskParticipants(). Кеш заданий, на которые пользователь ещё не ответил, сбрасывает clearIncompleteTaskCache(). Код отказа в просмотре вынесен в Command::ERROR_CODE_ITEM_VIEW_PERMISSION.

Защищённые точки расширения разделены по назначению:

  • Command\Update::{hasChangedUserFields,getChangedUserFieldNames}() проверяет изменённые пользовательские поля;
  • Components\ItemDetail::isReadOnly() определяет режим карточки;
  • Controller\Item::{getViewAccessDeniedError,getUpdateWithoutViewAccessError}() готовит ошибки доступа;
  • Controller\Task::{prepareDoResult,getItemController}() готовит результат ответа на задание и контроллер элемента.

Сверяйте задания с элементом

TaskManager::getUserIncompleteTaskItemIds() возвращает элементы типа, где у пользователя есть задание с USER_STATUS=Waiting. getItemIncompleteParticipantIds() выбирает такие же строки CBPTaskService и извлекает USER_ID участников, которые ещё не ответили на задание элемента. После ответа контроллер очищает кеш заданий, на которые этот пользователь ещё не ответил. Если доступ тут же пропал, ответ больше не содержит элемент и запись таймлайна. Текстовый комментарий теперь можно добавить, если пользователь видит тип и элемент. Новое вложение требует права менять элемент; без него при обновлении комментария можно сохранить только уже прикреплённые файлы.

Обновите Pull-обработчики и канбан

PullManager::rememberItemViewers() сохраняет получателей до записи элемента. sendItemSortedEvent() отправляет изменение пользовательской сортировки с previousItemId, после чего клиент ставит карточку за указанным элементом. У sendKanbanEvent() появился необязательный четвёртый параметр ?array $itemUserIds. В заголовке колонки канбана добавлена кнопка настроек. URL редактора стадии получает typeId через новый параметр UrlManager::getStageDetailUrl(), а слайдер открывается шириной 702 px.

Настройте стадию в новой форме

Редактор стадии группирует настройки, скрывает код стадии и показывает селектор изменения даже для первой стадии. При создании стадии список полей берётся из типа. Названия стадий и сообщения об ошибках теперь экранируются.

Что сломается

canEditItemOnAnyStage() теперь всегда возвращает false.

Доступ через предыдущую стадию удалён. После перемещения карточка может исчезнуть у пользователя прежней стадии и появиться у пользователя, который её переместил, либо у участника, который ещё не ответил на задание. Право создания больше не разрешает всем менять элементы первой стадии. Для своего элемента это право остаётся у автора; для остальных нужна возможность менять сохранённую стадию.

Controller\Item::updateAction() сначала требует просмотр элемента. При отказе поля не применяются, загруженные файлы удаляются, а запрос получает RPA_ITEM_VIEW_ACCESS_DENIED, RPA_ITEM_MOVE_ACCESS_DENIED либо RPA_ITEM_MODIFY_ACCESS_DENIED. Карточка без canModifyItem() открывается read-only, а форма перемещения отдельно проверяет исходную сохранённую стадию.

Компонент rpa.task больше не открывает задание только по известному ID. Пользователь должен входить в TASK['USERS'] либо видеть связанный элемент; задания других модулей отбрасываются. rpa.task.fields сверяет задание с текущим элементом и принимает участника, только пока этот пользователь ещё не ответил на задание. Просмотр сценария бизнес-процесса через ViewWorkflow теперь требует canModifyType() именно у переданного пользователя. Ветка CreateAutomation тоже проверяет права переданного $userId; раньше она использовала текущего пользователя.

Pull-события элемента и таймлайна уходят только подписчикам с правом просмотра. Потерявший доступ получает удаление карточки без её данных. У событий через sendItemEvent() только поля createdTime, updatedTime и movedTime форматируются отдельно для часового пояса каждого получателя. События таймлайна, сортировки и прямого удаления обходят это форматирование.

AJAX-даты теперь формируются через DateTime::toString().

Пользовательские ссылки на создание типа RPA в iframe должны передавать валидный sessid. Manager::openTypeDetail(0) добавляет его сам; ссылка без токена завершится ошибкой.

Проверьте вывод пользовательских данных

URL фотографий в канбане и таймлайне теперь кодируются. Вместе с экранированием названий стадий и сообщений об ошибках это закрывает места, где пользовательские значения попадали в интерфейс без нужной обработки.

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

Читайте дальше

rpa 26.300.0 Безопасность Свежее

Rpa 26.300.0: права на перемещение элементов наконец проверяются

До RPA 26.300.0 `UserPermissions::canMoveItem()` сразу отвечал `true`, и любой сотрудник, кроме экстранет-пользователей, мог перетащить любой элемент на любую стадию, а права стадии на перемещение не учитывались. Теперь права проверяются, а тем, кто может только смотреть, `rpa.item.get` и `rpa.item….

3 мин
rpa 26.200.0 Рутинное

Rpa 26.200.0: ноль и «Нет» в пользовательских полях больше не превращаются в null

В RPA 26.200.0 ноль перестал считаться пустым значением. Раньше `Controller\Item::processFields()` проверял пользовательские поля через `empty()`, и при сохранении элемента через AJAX или REST 0 в числовом поле, «Нет» в поле «Да/Нет» и строка `"0«` записывались как `null`. Теперь пустоту проверяет `…

1 мин
voximplant 26.900.0 Заметное Свежее

Voximplant 26.900.0: подписанные параметры экспорта статистики

Voximplant 26.900.0 подписывает имя компонента при экспорте детализации статистики. Обновление также исправляет REST-сценарии, отметку пропущенного переадресованного звонка и чтение настроек прокси.

1 мин
superset 26.700.0 Заметное Свежее

Superset 26.700.0: пользовательский контекст и проверяемый act-as

Версия 26.700.0 добавляет пользовательский контекст Superset в публичные провайдеры и команды. Проверяемый act-as для SQL Lab включается явно, поэтому существующие вызовы продолжают работать по-прежнему. Все новые параметры необязательны, прежние значения по умолчанию сохранены.

2 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти