Михаил Базаров Разработка на 1С-Битрикс Михаил Базаров

Как показывать товары со свойством только для участников, только пользователям этой группы "участники"

Вопрос задан: 28 июня 2026 в 01:00 | Просмотров: 5 Использованные MCP инструменты: searchDocs, liveApiFindFunction, liveApiGetFunctionCode, liveApiFindByReflection

Задайте свой вопрос — Работает AI в связке с MCP сервером. Перепроверяйте важную информацию.

Решение задачи: показ товаров "только для участников" группе "участники"

Подход 1. Расширенные права доступа к элементам инфоблока (нативное решение)

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

Шаг 1. Включите расширенное управление правами

Перейдите в Контент > Типы инфоблоков > [Ваш тип] > [Ваш инфоблок товаров].

На вкладке Доступ установите флажок Расширенное управление правами и сохраните инфоблок.

Шаг 2. Настройте права для конкретных товаров

Откройте карточку нужного товара (элемента инфоблока). На вкладке Доступ добавьте правило:

  • Группа: Все посетители (или Все пользователи) — Нет доступа;
  • Группа: [Ваша группа "участники"] — Чтение.

После сохранения товар будет виден только пользователям из группы "участники". Остальные (включая неавторизованных) увидят 404 или товар не попадёт в выборку.

Шаг 3. Программная настройка прав (если нужно массово назначить права через API):

<?php
\Bitrix\Main\Loader::includeModule('iblock');

$elementId = 123; // ID товара
$groupIdParticipants = 7; // ID группы "участники", уточните в настройках

// Создаём объект прав для элемента
$rights = new \CIBlockElementRights($elementId);

// Устанавливаем права:
// - для всех пользователей (ID=2) — нет доступа
// - для группы "участники" — чтение
$rights->SetRights([
    [
        'GROUP_CODE' => 'G2', // G2 = группа "Все пользователи"
        'TASK_ID'    => \CIBlockRights::DENY_ACCESS, // задача "Доступ закрыт"
    ],
    [
        'GROUP_CODE' => 'G' . $groupIdParticipants,
        'TASK_ID'    => \CIBlockRights::PUBLIC_READ, // задача "Чтение"
    ],
]);
?>

Проверка прав на лету (например, в кастомном компоненте):

<?php
global $USER;

$elementId = 123;

// Проверяем, может ли текущий пользователь читать элемент
$canRead = \CIBlockElementRights::UserHasRightTo(
    $elementId,
    'element_read', // операция "чтение элемента"
    $USER->GetID()
);

if ($canRead) {
    // показываем товар
} else {
    // скрываем
}
?>

Подход 2. Свойство инфоблока + фильтрация в шаблоне/компоненте

Этот подход удобен, если нужно гибко управлять видимостью через флажок в карточке товара, не затрагивая систему прав.

Шаг 1. Создайте свойство

В инфоблоке товаров создайте свойство типа "Список" (или "Флажок") с символьным кодом FOR_MEMBERS_ONLY и значением "Y" — "Только для участников".

Шаг 2. В админке заполните свойство у нужных товаров

Поставьте галочку для товаров, которые должны видеть только участники.

Шаг 3. В шаблоне компонента каталога добавьте фильтрацию

В файле result_modifier.php (или в component_epilog.php) вашего шаблона компонента catalog / news.list / catalog.section добавьте проверку:

<?php
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

global $USER;

// Определяем ID группы "участники" (замените на свой)
$participantsGroupId = 7;

// Проверяем, входит ли пользователь в группу "участники"
$isParticipant = in_array($participantsGroupId, $USER->GetUserGroupArray());

// Перебираем элементы и скрываем "закрытые" товары
if (!empty($arResult['ITEMS'])) {
    foreach ($arResult['ITEMS'] as $key => $item) {
        // Если свойство FOR_MEMBERS_ONLY = Y, а пользователь НЕ участник
        $forMembers = ($item['PROPERTIES']['FOR_MEMBERS_ONLY']['VALUE'] ?? '') === 'Y';
        if ($forMembers && !$isParticipant) {
            unset($arResult['ITEMS'][$key]);
        }
    }
    $arResult['ITEMS'] = array_values($arResult['ITEMS']); // переиндексация
}
?>

Шаг 4. Фильтрация на уровне SQL-запроса (оптимальнее)

Если у вас кастомный вызов CIBlockElement::GetList, можно отфильтровать прямо в запросе через событие OnBeforeIblockElementGetList или динамически добавить условие:

<?php
global $USER;

$participantsGroupId = 7;
$isParticipant = in_array($participantsGroupId, $USER->GetUserGroupArray());

$filter = ['IBLOCK_ID' => $iblockId];

if (!$isParticipant) {
    // Исключаем товары со свойством "только для участников"
    $filter['!PROPERTY_FOR_MEMBERS_ONLY'] = 'Y';
}

$result = \CIBlockElement::GetList(
    ['SORT' => 'ASC'],
    $filter,
    false,
    false,
    ['ID', 'NAME', 'DETAIL_PAGE_URL']
);
?>

Сравнение подходов

  • Подход 1 (права доступа) — самый правильный с точки зрения безопасности. Товар будет недоступен на уровне ядра: не попадёт в выборку, детальная страница вернёт 404, его нельзя будет добавить в корзину через прямой URL. Недостаток: настройка через админку чуть сложнее, нужно включать расширенное управление правами.
  • Подход 2 (свойство) — проще в администрировании, наглядно (галочка в карточке товара). Недостаток: работает только в визуальной части — технически товар существует и доступен по прямому URL, если не добавить дополнительную проверку на детальной странице.

Рекомендуется комбинировать оба подхода: через Подход 1 настроить права на уровне элемента, а через Подход 2 — для удобства визуального управления флажком «Только для участников» в карточке товара.

Услуги Стоимость разработки на 1С-Битрикс

Стоимость разработки сайта зависит от объёма и сложности проекта. Ниже приведены ориентировочные цены, как правило не выходят за обозначенные рамки. Срок разработки зависит от сложности проекта: как правило называю сроки с запасом.
Финальная стоимость и сроки разработки обговариваются на этапе обсуждения. Скачайте опросник на разработку, заполните как можно подробнее и вышлите удобным способом. После ознакомления смогу задать уточняющие вопросы и оценить проект.
Поддержка и доработки проектов
от 3 000 руб. от 1 часа

Выполнение доработок любой сложности. Поддержка, модернизация и расширение функционала существующих проектов. Решение задач: от мелких правок вёрстки до разработки новых модулей.

Подробнее
Сайт на готовом решении 1С-Битрикс
от 70 000 руб. от 5-ти дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Подробнее
Индивидуальная разработка магазина
от 300 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Подробнее
Мобильное приложение
от 300 000 руб. от 4-х недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Подробнее
Инфоресурс
от 170 000 руб. от 3-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

Подробнее
Сайт компании
от 150 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Подробнее

Включено в стоимость разработки:

  • Лицензия на 1С-Битрикс необходимой редакции, дополнительные модули, для реализации функционала и видео-инструкции по работе с готовым проектом
  • Оптимизация программной части проекта и конфигурации сервера под максимальную скорость работы. Базовая СЕО оптимизация и добавление сайта в поисковые системы.

Блог-note Заметки по 1С-Битрикс