IsAuthorized, GetID и IsAdmin —
три метода класса CUser, которые чаще всего вызываются
вместе для одной цели: понять, кто перед нами, и что ему разрешено.
Разберём каждый и типичные ошибки в порядке их вызова.
IsAuthorized: авторизован ли посетитель
<?php
global $USER;
if ($USER->IsAuthorized()) {
// посетитель вошёл под своим аккаунтом
} else {
// гость
}
Это первая проверка почти в любом сценарии, зависящем от авторизации. Важно: метод не проверяет права доступа — только сам факт входа в систему. Авторизованный пользователь может быть кем угодно, от администратора до только что зарегистрировавшегося покупателя.
GetID: идентификатор текущего пользователя
<?php
global $USER;
$userId = $USER->GetID();
Для неавторизованного посетителя метод вернёт 0 — это
не идентификатор ошибки, а зарезервированное значение для гостя.
Использовать GetID() без предварительной проверки
IsAuthorized() — источник тонких багов: код может
выполнить действие «от лица пользователя с ID 0», если проверку
забыли.
<?php
global $USER;
if (!$USER->IsAuthorized()) {
return; // не продолжаем без авторизации
}
$userId = $USER->GetID();
Нужна помощь с Битрикс?
IsAdmin: относится ли пользователь к администраторам
<?php
global $USER;
if ($USER->IsAdmin()) {
// доступны расширенные возможности
}
Метод проверяет, состоит ли пользователь в группе с флагом «Административная» — обычно это группа полного доступа, заданная при установке системы. Для более гибкой проверки прав, не сводящейся к бинарному «администратор или нет», используется полноценная система прав доступа с проверкой конкретных разрешений группы.
Типичная последовательность проверок
<?php
global $USER;
if (!$USER->IsAuthorized()) {
LocalRedirect('/auth/?backurl=' . urlencode($APPLICATION->GetCurPageParam()));
}
if ($USER->IsAdmin()) {
// показать панель управления
} else {
// показать обычный интерфейс для этого пользователя
$userId = $USER->GetID();
}
Проверка группы, отличной от администраторов
Если нужно проверить принадлежность не к группе администраторов,
а к произвольной другой — например, группе «Оптовики», —
IsAdmin() не подойдёт, нужна проверка списка групп
пользователя напрямую:
<?php
global $USER;
$groups = $USER->GetUserGroupArray();
if (in_array(7, $groups)) {
// пользователь состоит в группе с ID 7
}
Частые ошибки
-
GetID()вызывается без проверки авторизации. Для гостя возвращается0, и код может выполнить действие с этим значением как с настоящим ID. -
IsAdmin()используется как единственная проверка прав. Для более тонкой логики нужна проверка конкретных групп или полноценных прав доступа. -
Проверки выполняются в неверном порядке.
Обращение к данным пользователя до проверки
IsAuthorized()может привести к работе с пустыми или нулевыми значениями.
Итог
Три метода решают три разных вопроса: IsAuthorized() —
вошёл ли пользователь вообще, GetID() — какой у него
идентификатор (с оговоркой про 0 для гостя),
IsAdmin() — состоит ли он в административной группе.
Правильный порядок — сначала проверить факт авторизации, и только
затем обращаться к идентификатору и правам, иначе легко получить
логику, работающую для несуществующего пользователя с ID 0.
