Как вывести информацию о активных группах пользователей, которые имеют доступ к определенному товару через "Права доступа к элементу"?

Как в Битриксе можно получить информацию об активных группах пользователей из "Прав доступа к элементу" для определенного товара? Это необходимо для последующей проверки. Если у товара определенная группа пользователей активна, то нужно выполнить определенное действие.
  • 18 ноября 2023 г. 14:19
Ответы на вопрос 2
Для получения информации о активных группах пользователей с доступом к определенному товару через "Права доступа к элементу" в Битриксе, можно воспользоваться методом GetList из класса CIBlockElementRights.

Пример кода:

use Bitrix\Main\Loader;
use Bitrix\Main\Engine\Response\AjaxJson;
use Bitrix\Main\Context;
use Bitrix\IBlock\ElementRightsTable;
use Bitrix\Main\Localization\Loc;

class MyComponent extends CBitrixComponent
{
    public function executeComponent()
    {
        if (!Loader::includeModule('iblock')) {
            return;
        }

        $productId = 123; // ID товара
        $activeGroups = [];

        $result = ElementRightsTable::getList([
            'select' => ['GROUP_CODE'],
            'filter' => [
                'ELEMENT_ID' => $productId,
                'GROUP.ACTIVE' => 'Y'
            ],
            'cache' => ['ttl' => 3600]
        ]);

        while ($row = $result->fetch()) {
            $activeGroups[] = $row['GROUP_CODE'];
        }

        // Проверяем наличие нужной группы пользователей
        if (in_array('MY_GROUP_CODE', $activeGroups)) {
            // Выполняем определенное действие
        }

        $this->arResult['activeGroups'] = $activeGroups;
        $this->includeComponentTemplate();
    }
}
?>

В данном примере реализован компонент, который получает информацию о активных группах пользователей с доступом к товару с ID 123 через "Права доступа к элементу". Затем производится проверка наличия конкретной группы пользователей (с кодом MY_GROUP_CODE) среди активных групп. Если такая группа есть, выполняется определенное действие.
https://dev.1c-bitrix.ru/api_help/main/reference/c...global $USER;
$needUserGroup = 1; // Группа, которую вы проверяете
if (in_array($needUserGroup,  $USER->GetUserGroupArray())) {
    // Ваш код
}
Для предотвращения проблемы, когда отладочная информация попадает обычным пользователям сайта, обязательно учитывайте использование кэширования.
Похожие вопросы