В системе 1С-Битрикс, как и в большинстве современных веб-систем, важно управлять доступом к различным разделам сайта, а также персонализировать контент в зависимости от статуса авторизации пользователя. Для этого в Битрикс существует метод `IsAuthorized`, который позволяет проверить, авторизован ли текущий пользователь. В этой статье мы подробно рассмотрим, как использовать этот метод и приведем примеры его применения в реальных проектах.

Что такое `CUser::IsAuthorized`?
Метод `IsAuthorized` является не статическим методом класса `CUser` и используется для проверки, вошел ли пользователь в систему. Если пользователь авторизован, метод возвращает `true`; если нет — `false`. С версии 20.5.46 метод используется следующим образом:
global $USER;
$USER->IsAuthorized();
Пример использования метода `IsAuthorized`
1. Проверка авторизации перед отображением контента
Этот пример демонстрирует, как можно использовать метод `IsAuthorized` для персонализации контента на сайте в зависимости от того, авторизован ли пользователь.
if ($USER->IsAuthorized()) {
echo "Добро пожаловать, " . $USER->GetFullName();
} else {
echo "Пожалуйста, войдите в систему.";
}
2. Условное выполнение кода
Предположим, что на сайте есть страница личного кабинета, и доступ к ней должен быть только у авторизованных пользователей. С помощью метода `IsAuthorized` можно легко реализовать это условие.
if ($USER->IsAuthorized()) {
// Код, который выполняется только для авторизованных пользователей
// Например, доступ к личному кабинету
include 'profile.php';
} else {
echo "Доступ ограничен. Пожалуйста, войдите в систему.";
}
3. Ограничение доступа к определенной странице
Еще один частый случай — это редирект неавторизованных пользователей на страницу входа. Для этого достаточно проверить авторизацию и выполнить редирект в случае неуспешной проверки.
if (!$USER->IsAuthorized()) {
header("Location: login.php");
exit();
}
4. Отображение разных меню для авторизованных и неавторизованных пользователей
С помощью метода `IsAuthorized` можно изменять содержимое меню в зависимости от того, авторизован ли пользователь.
if ($USER->IsAuthorized()) {
echo "Выход";
} else {
echo "Вход";
}
5. Логирование действий авторизованного пользователя
Метод `IsAuthorized` также полезен для логирования действий пользователей на сайте. Например, можно записывать действия пользователя в логи, если он авторизован.
if ($USER->IsAuthorized()) {
// Логируем действия пользователя
LogUserAction($USER->GetID(), "Просмотр страницы");
}
6. Защита формы от неавторизованных пользователей
Метод можно использовать для защиты форм на сайте от неавторизованных пользователей. В случае если пользователь не авторизован, можно вывести сообщение с просьбой войти в систему.
if ($USER->IsAuthorized()) {
// Отображаем форму для авторизованных пользователей
echo "";
} else {
echo "Вы должны войти, чтобы отправить форму.";
}
7. Отображение сообщения об ошибке при попытке доступа к защищенной странице
Иногда бывает необходимо ограничить доступ к некоторым страницам только для авторизованных пользователей. В таких случаях можно вывести ошибку, если попытка доступа идет от неавторизованного пользователя.
if (!$USER->IsAuthorized()) {
echo "Ошибка: Вы должны быть авторизованы для доступа к этой странице.";
}
8. Использование в AJAX-запросах
Метод `IsAuthorized` также можно использовать в обработчиках AJAX-запросов для проверки авторизации пользователя перед выполнением запроса.
if ($USER->IsAuthorized()) {
// Обработка AJAX-запроса
echo json_encode(["status" => "success"]);
} else {
echo json_encode(["status" => "error", "message" => "Не авторизован"]);
}
Пример решения задачи по обработке обращений в техподдержку от авторизованных и анонимных пользователей
В некоторых случаях требуется получать обращения в техподдержку как от авторизованных пользователей, так и от анонимных. Для этого можно использовать следующую схему.
Шаг 1. Создаем пользователя `anonymous`
Необходимо создать специального пользователя с именем "anonymous", который будет иметь минимальные права для создания обращения в техподдержку.
Шаг 2. Принудительная авторизация пользователя "anonymous"
На странице создания обращения необходимо принудительно авторизовать пользователя под аккаунтом "anonymous", если он не авторизован.
if (!$USER->IsAuthorized()) {
$USER->Authorize(44); // 44 - ID пользователя anonymous
}
Шаг 3. Кастомизация компонента создания обращения
Необходимо кастомизировать шаблон компонента `support.ticket.edit`, добавив обязательное поле email для пользователя "anonymous". Это обеспечит сбор необходимых данных, даже если пользователь не авторизован.
Шаг 4. Обработчик `OnAfterTicketAdd`
Для корректной обработки обращений, поступивших от анонимных пользователей, можно создать обработчик события `OnAfterTicketAdd`, который будет изменять источник обращения на email и указывать email автора через `CTicket::Set`.
AddEventHandler("support", "OnAfterTicketAdd", "OnAfterTicketAddHandler");
function OnAfterTicketAddHandler($ID, $arFields) {
if ($arFields["CREATED_BY"] == 44) {
// Изменяем источник обращения на email
$ticket = new CTicket;
$ticket->Set($ID, ["SOURCE" => "email", "EMAIL" => $arFields["EMAIL"]]);
}
}
Теперь новое обращение будет выглядеть так, как будто оно пришло по email. Автор будет получать ответы на свой email, даже если изначально не был авторизован.
Заключение
Метод `IsAuthorized` — это мощный инструмент для контроля доступа и персонализации контента в 1С-Битрикс. Он позволяет проверять статус авторизации пользователя и в зависимости от этого отображать различные части сайта, выполнять определенные действия или ограничивать доступ. Используя приведенные примеры, можно легко интегрировать проверку авторизации в своем проекте, а также решать более сложные задачи, такие как обработка обращений в техподдержку от авторизованных и анонимных пользователей.