Socialnetwork 26.300.0–26.400.0: массовая проверка прав на группы и защита ленты
Обновление безопасности
Закрыта уязвимость или ослабленная проверка прав. Ставить в первую очередь.
Socialnetwork 26.300.0 и 26.400.0 закрывают доступ к чужим данным ленты и добавляют массовую проверку прав на группы. В проектах появились команды из оргструктуры и встраиваемый блок информации, а коллабы без extranet принимают только внутренних участников. Проверьте свои приглашения, ссылки на скрам и шаблоны «Важных сообщений».
Новое
Проверяйте доступ сразу к списку групп
В 26.400.0 появился Bitrix\Socialnetwork\Permission\GroupAccessController::getAccessibleGroups(). Он принимает пользователя, действие и список ID, возвращает результаты по группам, включая отсутствующие. В каждом результате есть isFound, canView, isVisible, role, isExtranet, type и isNewProject. Для своего каталога проектов можно сначала проверить весь список, затем показать доступные карточки:
use Bitrix\Main\Loader;
use Bitrix\Socialnetwork\Permission\GroupAccessController;
use Bitrix\Socialnetwork\Permission\GroupDictionary;
if (Loader::includeModule('socialnetwork')) {
$access = GroupAccessController::getAccessibleGroups(
$viewerId,
GroupDictionary::VIEW,
$groupIds,
);
}
$viewerId здесь берётся из доверенного контекста авторизации. Лимит одного вызова — 100 ID; превышение даёт ArgumentException. Массовое правило пока есть только для просмотра: попытка проверить другое действие закончится UnknownActionException. Существование группы и право просмотра проверяйте отдельно по полям результата.
Событие OnSocNetGroupUpdate в 26.400.0 получило третий аргумент $changedFieldNames: список действительно записанных полей. Старые обработчики сохраняют совместимость, новые могут реагировать только на нужные изменения.
Покажите сведения о проекте внутри своего интерфейса
Расширение socialnetwork.v2.application.project-info-embed из 26.400.0 экспортирует embedProjectInfo({projectId, onReady}). Оно возвращает mount и unmount для блока «Информация» только для чтения. Штатный потребитель — сайдбар чата; в своей встройке можно использовать тот же блок. AJAX socialnetwork.V2.Project.getViewInfo отдаёт описание, цель, даты и теги проекта.
С 26.300.0 команда HR может быть участником проекта. Назначить команду модератором нельзя, а команда приглашения участников принимает только пользователей. В 26.400.0 инструмент «Списки» стал переключаемым в мастере Проектов 2.0 и выключенным при создании. Он доступен порталам, созданным до 9 октября 2026 года, и порталам с неизвестной датой создания.
Учитывайте проверки доступа в ленте
С 26.300.0 socialnetwork.api.contentview.getList возвращает список просмотревших только тому, кто может прочитать сам контент. При отказе и при пустом contentId приходит пустой список. socialnetwork.api.workgroup.get тоже проверяет право просмотра группы.
В 26.400.0 служебный комментарий о созданной задаче или событии требует авторизации, авторства сущности, совпадения записи ленты с её источником и права читать запись. Модерация комментария проверяет его принадлежность текущему посту. Компонент копирования больше не принимает из POST произвольную пару «модуль — опция» для удаления: значения берутся из подписанных параметров.
Что сломается
Добавляйте гостей только при установленном extranet
В 26.300.0 коллабы и Проекты 2.0 открываются без extranet, но внешних участников добавить или повысить в роли нельзя. Ограничение действует и в CSocNetUserToGroup, и в REST sonet_group.update, sonet_group.user.invite, sonet_group.user.add, sonet_group.user.update. Внутренними считаются сотрудники, администраторы и боты. REST возвращает исключение, legacy-методы — false; обработайте отказ приглашения.
Helper\Workgroup::setModerators() теперь возвращает false, если хотя бы один перевод не удался. Отфильтрованные внешние пользователи попадают в необязательный выходной $outcome['rejectedUserIds'].
Перестройте ссылки и параметры своих шаблонов
С 26.300.0 Site\GroupUrl::get() для скрама возвращает адрес вида /workgroups/group/<ID>/tasks/?scrum=Y. Склеивание с 'card/' даёт неверную ссылку; для карточки группы используйте GroupUrl::getCard($groupId).
В 26.400.0 «Важные сообщения» перешли на прямую нумерацию страниц: bDescPageNumbering = false. Копии шаблонов со старым значением сохранят прежнюю нумерацию и не получат новый кеш. В фотогалерее группы явно заданный PHOTO_GROUP_IBLOCK_ID больше не перезаписывается автоопределением; поиск при незаданном параметре идёт только по корневому разделу.
У селектора fired-user опция referenceFieldName в 26.400.0 осталась в контракте, но запрос использует только fieldName. Если ваша конфигурация передавала разные имена, проверьте состав выборки.