Руководство по использованию метода CUser::IsAuthorized в 1С-Битрикс

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

Руководство по использованию метода CUser::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С-Битрикс. Он позволяет проверять статус авторизации пользователя и в зависимости от этого отображать различные части сайта, выполнять определенные действия или ограничивать доступ. Используя приведенные примеры, можно легко интегрировать проверку авторизации в своем проекте, а также решать более сложные задачи, такие как обработка обращений в техподдержку от авторизованных и анонимных пользователей.

Теги:  CUser::IsAuthorized, авторизация, проверка авторизации, веб-разработка, персонализация контента

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Участие в проекте

привлечение в проект на part-time основе

от 20 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Перенос сайтов на «1С-Битрикс»

сайты на платформе «1С-Битрикс» — это удобство, надежность и высокая посещаемость

от 12 000 рублей
Перенос сайтов с любых CMS и статичных страниц на платформу «1С-Битрикс», с учетом дизайна, верстки и урл-адресов. С сохранением всей информации и структуры сайта.

* зависит от объема выполняемых работ.

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.