Работа с пользователями — одна из самых частых задач в Битрикс-разработке. Рассмотрим как регистрировать, авторизовать и управлять пользователями через современный API.
Получение текущего пользователя
global $USER;
// Проверка авторизации
if ($USER->IsAuthorized()) {
$userId = $USER->GetID();
$userEmail = $USER->GetEmail();
$userName = $USER->GetFirstName();
// Проверка группы
if ($USER->IsAdmin()) {
echo 'Администратор';
}
if ($USER->IsInGroup(5)) {
echo 'Пользователь в группе 5';
}
}
Получение данных пользователя через D7
use Bitrix\Main\UserTable;
// Один пользователь
$user = UserTable::getById(42)->fetch();
// Список с фильтром
$users = UserTable::getList([
'select' => ['ID', 'NAME', 'LAST_NAME', 'EMAIL', 'DATE_REGISTER'],
'filter' => [
'ACTIVE' => 'Y',
'%EMAIL' => '@company.ru', // LIKE
],
'order' => ['DATE_REGISTER' => 'DESC'],
'limit' => 50,
])->fetchAll();
// Получить пользователей группы
$users = UserTable::getList([
'filter' => ['GROUPS.GROUP_ID' => 5],
])->fetchAll();
Регистрация пользователя
$user = new \CUser();
$userData = [
'NAME' => 'Иван',
'LAST_NAME' => 'Иванов',
'EMAIL' => 'ivan@example.com',
'LOGIN' => 'ivan@example.com',
'PASSWORD' => 'SecurePass123!',
'CONFIRM_PASSWORD' => 'SecurePass123!',
'ACTIVE' => 'Y',
'GROUP_ID' => [2], // группа "Пользователи"
];
$userId = $user->Add($userData);
if (intval($userId) > 0) {
echo 'Пользователь создан: ' . $userId;
} else {
echo 'Ошибка: ' . $user->LAST_ERROR;
}
Авторизация пользователя
global $USER;
// Авторизация по логину/паролю
$result = $USER->Login('ivan@example.com', 'password', 'Y');
if ($result !== true) {
echo 'Ошибка входа: ' . $result['MESSAGE'];
} else {
echo 'Авторизован: ' . $USER->GetID();
}
// Авторизация без пароля (для API)
$USER->Authorize($userId);
Обновление пользователя
$user = new \CUser();
$result = $user->Update($userId, [
'NAME' => 'Пётр',
'LAST_NAME' => 'Петров',
'PERSONAL_PHONE' => '+79001234567',
]);
if (!$result) {
echo 'Ошибка: ' . $user->LAST_ERROR;
}
Пользовательские свойства (UF_)
// Получить значение свойства
$userData = \CUser::GetByID($userId)->Fetch();
echo $userData['UF_COMPANY']; // кастомное поле
// Обновить через D7
$user = new \CUser();
$user->Update($userId, ['UF_COMPANY' => 'ООО Ромашка']);
// Или напрямую через D7 UserTable
\Bitrix\Main\UserTable::update($userId, [
'UF_COMPANY' => 'ООО Ромашка',
]);
Управление группами
// Добавить пользователя в группу
\CUser::SetUserGroup($userId, array_merge(
\CUser::GetUserGroup($userId),
[5] // ID группы
));
// Убрать из группы
$groups = \CUser::GetUserGroup($userId);
$groups = array_diff($groups, [5]);
\CUser::SetUserGroup($userId, array_values($groups));
Итог
Для выборок используйте UserTable::getList() — это быстрее и типизировано. Для изменений — new \CUser(), так как старый API обрабатывает события и кэш корректно. Никогда не обновляйте таблицу пользователей через raw SQL.
