Yandex Metrika
sanches.free

Пользователи и группы в D7 ORM

Связующая модель

Таблица UserGroupTable описывает пары пользователь / группа: по ней удобно узнать, в каких группах состоит конкретный логин и каких пользователей содержит роль администратора каталога. Таблицы UserTable и GroupTable дают реквизиты сторон связи.

Списки и фильтры

Достаточно собрать 'select'/'filter'/'order', как для любых ORM-сущностей ядра, и использовать fetchAll(), если объём выборки укладывается в разумный лимит страницы.

use Bitrix\Main\UserTable;
use Bitrix\Main\GroupTable;
use Bitrix\Main\UserGroupTable;

$groups = GroupTable::getList([
    'select' => ['ID', 'NAME', 'ACTIVE', 'C_SORT'],
    'filter' => ['=ACTIVE' => 'Y'],
    'order' => ['C_SORT' => 'ASC'],
])->fetchAll();

$userIds = UserGroupTable::getList([
    'filter' => ['=GROUP.STRING_ID' => 'CATALOG_EDITOR'],
    'select' => ['USER_ID'],
])->fetchAll();

$users = UserTable::getList([
    'filter' => ['@ID' => array_column($userIds, 'USER_ID')],
    'select' => ['ID', 'LOGIN', 'EMAIL', 'NAME', 'LAST_NAME'],
])->fetchAll();

$memberships = UserGroupTable::getList([
    'filter' => ['=USER_ID' => 128],
    'select' => [
        'GROUP_ID',
        'DATE_ACTIVE_FROM',
        'DATE_ACTIVE_TO',
        'ROLE_NAME' => 'GROUP.NAME',
    ],
])->fetchAll();

На что смотреть

  • У учётной записи и группы бывают даты активности связи — они участвуют в проверках прав как срез во времени.
  • Для связей «ко многим» выборки лучше пагинировать через limit/offset, чтобы административная страница не тянула весь регистрационный справочник сразу.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии