Руководство по использованию класса CurrentUser в 1С-Битрикс D7

В 1С-Битрикс для работы с текущим пользователем предусмотрен класс \Bitrix\Main\Engine\CurrentUser, который упрощает получение данных о текущем пользователе системы. Он представляет собой удобный интерфейс для работы с пользователем в контексте обработки запросов и взаимодействия с API.

CurrentUser, пользователь, методы, интеграция, контроллеры

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

Что такое CurrentUser?

Класс CurrentUser инкапсулирует информацию о текущем пользователе в системе. Он предоставляет методы для получения данных пользователя, таких как ID, логин, email, фамилия, имя и другие. Этот класс служит для того, чтобы работать с пользователем без необходимости взаимодействовать напрямую с глобальной переменной $USER.

Основные методы класса

Рассмотрим ключевые методы, которые предоставляет класс CurrentUser.

1. Метод get()

Метод get() возвращает текущего пользователя, используя глобальную переменную $USER.

public static function get()
{
    global $USER;
    $self = new static();
    $self->cuser = $USER;

    return $self;
}

Пример использования:

$currentUser = \Bitrix\Main\Engine\CurrentUser::get();
echo $currentUser->getId();  // Выведет ID текущего пользователя

2. Метод getId()

Метод getId() возвращает ID текущего пользователя.

public function getId()
{
    return $this->cuser->getId();
}

Пример использования:

$currentUser = \Bitrix\Main\Engine\CurrentUser::get();
$userId = $currentUser->getId();  // Получаем ID пользователя
echo $userId;

3. Метод getLogin()

Метод getLogin() возвращает логин текущего пользователя.

public function getLogin()
{
    return $this->cuser->getLogin();
}

Пример использования:

$currentUser = \Bitrix\Main\Engine\CurrentUser::get();
echo $currentUser->getLogin();  // Выведет логин текущего пользователя

4. Метод getEmail()

Метод getEmail() возвращает email текущего пользователя.

public function getEmail()
{
    return $this->cuser->getEmail();
}

Пример использования:

$currentUser = \Bitrix\Main\Engine\CurrentUser::get();
echo $currentUser->getEmail();  // Выведет email текущего пользователя

5. Метод getFullName()

Метод getFullName() возвращает полное имя пользователя.

public function getFullName()
{
    return $this->cuser->getFullName();
}

Пример использования:

$currentUser = \Bitrix\Main\Engine\CurrentUser::get();
echo $currentUser->getFullName();  // Выведет полное имя пользователя

6. Метод getUserGroups()

Метод getUserGroups() возвращает массив групп, к которым принадлежит пользователь.

public function getUserGroups()
{
    return $this->cuser->getUserGroupArray();
}

Пример использования:

$currentUser = \Bitrix\Main\Engine\CurrentUser::get();
$userGroups = $currentUser->getUserGroups();
print_r($userGroups);  // Выведет массив групп пользователя

Интеграция с методами контроллеров

Одним из самых удобных способов использования класса CurrentUser является интеграция его с действиями контроллеров.

Пример использования в методах контроллера

Предположим, у нас есть контроллер с действием, которое требует информацию о текущем пользователе.

use Bitrix\Main\Engine\Controller;
use Bitrix\Main\Engine\CurrentUser;
use Bitrix\Main\Error;

class MyController extends Controller
{
    public function getAction(Folder $folder)
    {
        // Получаем текущего пользователя
        $currentUser = $this->getCurrentUser();

        // Получаем контекст безопасности для текущего пользователя
        $securityContext = $folder->getStorage()->getSecurityContext($currentUser->getId());

        // Проверяем, имеет ли пользователь доступ к чтению
        if (!$folder->canRead($securityContext)) {
            $this->addError(new Error('Не удалось прочитать папку.'));
            return null;
        }

        return $folder->toArray();
    }
}

В этом примере метод контроллера getAction использует метод getCurrentUser(), чтобы получить текущего пользователя и выполнить проверку доступа.

Интеграция с помощью зависимостей через параметры метода ajax-действия

Другим способом получения пользователя является использование зависимости в методах, которые обрабатывают AJAX-запросы.

public function getAction(Folder $folder, CurrentUser $currentUser)
{
    // Получаем контекст безопасности для текущего пользователя
    $securityContext = $folder->getStorage()->getSecurityContext($currentUser->getId());

    // Проверяем, имеет ли пользователь доступ к чтению
    if (!$folder->canRead($securityContext)) {
        $this->addError(new Error('Не удалось прочитать папку.'));
        return null;
    }

    return $folder->toArray();
}

В этом случае зависимость CurrentUser передается через параметры метода, что позволяет получить текущего пользователя без необходимости вручную извлекать его в коде.

Заключение

Класс \Bitrix\Main\Engine\CurrentUser предоставляет мощный и удобный интерфейс для работы с текущим пользователем в 1С-Битрикс. Он значительно упрощает процесс получения данных о пользователе, позволяет интегрировать информацию о пользователе в контроллеры и действия с минимальными усилиями.

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

Теги:  CurrentUser, пользователь, методы, интеграция, контроллеры

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

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора

Лендинг

от 3 дней

от 25 000 рублей

Разработка одностраничного сайта на платформе Битрикс

* стоимость зависит от наличия верстки, использования готового решения и т.д.