Связующая модель
Таблица 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 дней гарантии