Пользователи

Пользователь — это учетная запись с логином, паролем и определенными правами доступа.

Список всех пользователей находится в административном разделе на странице Настройки > Пользователи > Список пользователей. Адрес страницы — /bitrix/admin/user_admin.php.

Самостоятельная регистрация пользователей

В системе можно разрешить самостоятельную регистрацию пользователей.

  1. Откройте настройки Главного модуля — Настройки > Настройки продукта > Настройки модулей Главный модуль.

  2. На вкладке Авторизация установите флаг Позволять ли пользователям регистрироваться самостоятельно.

При регистрации пользователь получит логин и пароль. Система автоматически добавит пользователя в группу, которая указана в параметре При регистрации добавлять в группу. Позже администратор может изменить список групп для пользователя вручную.

Как добавить или изменить пользователя

  1. Откройте страницу Настройки > Пользователи > Список пользователей.

  2. Выберите действие:

    • создать нового пользователя — нажмите Добавить пользователя,

    • изменить существующего — найдите пользователя и нажмите Изменить или дважды кликните по строке.

  3. Заполните форму редактирования.

Вкладки формы редактирования

Каждая вкладка отвечает за определенный блок настроек учетной записи.

Пользователь. Настройка общих параметров пользователя: имени, логина, пароля, адреса электронной почты. Обязательные поля: Логин, Новый пароль, Подтверждение нового пароля.

Номер телефона и email можно сделать обязательными для регистрации, если в настройках Главного модуля отметить опции Номер телефона является обязательным и Email является обязательным полем.

Группы. Выбор групп для привязки. Отметьте группы и укажите период времени, на который осуществляется привязка.

Подробнее о группах читайте в статье Группы пользователей.

Безопасность. Информация по настройкам безопасности для пользователя.

Если пользователь входит в несколько групп, для каждого параметра безопасности применяется самое строгое значение из всех его групп.

Личные данные. Дополнительная информация о пользователе.

Работа. Данные о компании, должности, контактах.

Рейтинг. Установка начального значения рейтинга.

Блог. Настройки профиля пользователя в блогах: псевдоним, интересы, аватар.

Форум. Параметры профиля пользователя для форума: подпись, аватар.

Обучение. Настройка отображения профиля в модуле Обучение.

Двухэтапная авторизация. Подключение мобильного приложения или брелка одноразовых паролей, если в системе включен механизм двухэтапной авторизации.

Подробнее читайте в статье Двухэтапная авторизация.

Заметки. Поле для комментария.

Доп. поля. Пользовательские поля для объекта USER. Новое поле можно создать по ссылке Добавить пользовательское поле.

Подробнее читайте в статье Пользовательские поля.

Как настроить права доступа

Права доступа к разделам и инструментам сайта настраиваются на уровне группы. Пользователь может состоять в нескольких группах. Если права различаются, пользователь получает наиболее высокий уровень прав.

Пример. Пользователь состоит в группах Сотрудники и Маркетинг.

  • Сотрудники — разрешен просмотр портала, кроме раздела Документы.

  • Маркетинг — полный доступ к разделу Документы.

В результате пользователь имеет доступ к порталу и к разделу Документы.

Подробнее читайте в статье Права доступа.

API пользователей

Для работы с пользователями используйте классы:

  • \Bitrix\Main\UserTable —для выборки данных,

  • CUser — для базовых операций: создать, изменить или удалить пользователя,

  • \Bitrix\Main\Engine\CurrentUser — для доступа к данным текущего пользователя из действий контроллера.

Когда работаете с классом CUser, при запуске страницы автоматически создается объект $USER. Он содержит данные о текущем пользователе.

global $USER;
        
        /**
         * @var \CUser $USER
         */
        
        $userId = $USER->GetID();
        

Добавить нового пользователя

$user = new CUser();
        $id = $user->Add([
            "NAME" => "Иван",
            "LAST_NAME" => "Петров",
            "EMAIL" => "ipetrov@example.ru",
            "LOGIN" => "ipetrov",
            "LID" => "s1",
            "ACTIVE" => "Y",
            "GROUP_ID" => [2, 3],
            "PASSWORD" => "strong_password_123",
            "CONFIRM_PASSWORD" => "strong_password_123",
        ]);
        
        if ($id > 0)
        {
            echo "Пользователь добавлен, ID: " . $id;
        }
        else
        {
            echo "Ошибка: " . $user->LAST_ERROR;
        }
        

Изменить данные пользователя

$user = new CUser();
        $user->Update($ID, [
            "EMAIL" => "ivan.petrov@example.ru",
            "GROUP_ID" => [2, 3, 5],
        ]);
        
        if ($user->LAST_ERROR) {
            echo "Ошибка: " . $user->LAST_ERROR;
        }
        

Выполнить авторизацию пользователя

global $USER;
        
        /**
         * @var \CUser $USER
         */
        
        $authResult = $USER->Login($login, $password, "Y");
        if ($authResult === true)
        {
            // Пользователь успешно авторизовался
            LocalRedirect("/personal/");
        }
        else {
            // Вывести ошибку
            ShowMessage($authResult['MESSAGE']);
        }
        

Код выполняет проверку пароля и возможность входа.

global $USER;
        
        /**
         * @var \CUser $USER
         */
        
        $USER->Authorize($userId);
        

Код выполняет авторизацию под пользователем с идентификатором $userId.

Проверить авторизацию

// пример с контроллером
        class Example extends Controller
        {
            public function saveAction(CurrentUser $user)
           {
               $isAuthorized = $user->getId() > 0;
           }
        }
        
global $USER;
        
        /**
         * @var \CUser $USER
         */
        
        if ($USER->IsAuthorized())
        {
            echo "Пользователь авторизован";
        }
        else
        {
            echo "Пользователь не авторизован";
        }
        

Получить данные текущего пользователя

class Example extends Controller
        {
            #[Authentication]
            public function saveAction(CurrentUser $user)
           {
                $login = $user->getLogin();
                $name  = $user->getName();
        
                // ...
            }
        }
        

Выбрать пользователей по фильтру

Код выводит всех пользователей с именем Иван и фамилией Петров.

use Bitrix\Main\UserTable;
        
        $users = UserTable::query()
            ->setSelect(['ID', 'NAME', 'LAST_NAME', 'EMAIL'])
            ->where('ACTIVE')
            ->where('NAME', 'Иван')
            ->whereLike('LAST_NAME', 'Петров%')
            ->setOrder(['LAST_LOGIN' => 'DESC'])
            ->fetchCollection()
        ;
        /**
         * @var \Bitrix\Main\EO_User $user
         */
        foreach ($users as $user)
        {
            $user->getName();
            $user->getEmail();
        }
        

Выбрать пользователей группы по фильтру

Код выводит список активных пользователей администраторов (группу с ID=1).

$users = \Bitrix\Main\UserTable::query()
            ->setSelect(['ID', 'NAME', 'EMAIL'])
            ->setFilter([
                'GROUPS.GROUP_ID' => 1,
                '=ACTIVE' => 'Y'
            ])
            ->fetchCollection()
        ;
        /**
         * @var \Bitrix\Main\EO_User $user
         */
        foreach ($users as $user)
        {
            # code...
        }
        

Выбрать группы пользователя

$users = \Bitrix\Main\UserTable::query()
            ->setSelect(['ID', 'GROUPS.GROUP'])
            ->setLimit(1)
            ->fetchCollection()
        ;
        /**
         * @var \Bitrix\Main\EO_User $user
         */
        foreach ($users as $user)
        {
            foreach ($user->getGroups() as $userGroup)
            {
                $activeTo = $userGroup->getDateActiveTo();
                $activeFrom = $userGroup->getDateActiveFrom();
        
                $group = $userGroup->getGroup();
                $groupName = $group->getName();
        
                # code...
            }
        }
        

Состоит ли пользователь в группе

В примере проверяется, состоит ли текущий пользователь в группе с ID=3.

global $USER;
        
        /**
         * @var \CUser $USER
         */
        
        $groupId = 1;
        if (in_array($groupId, $USER->GetUserGroupArray()))
        {
            # code...
        }
        

Удалить пользователя

/**
         * @var \CMain $APPLICATION
         */
        
        $isDeleted = CUser::Delete($userId);
        if (!$isDeleted)
        {
            $error = (string)$APPLICATION->GetException();
            if (empty($error))
            {
                $error = "Пользователь не найден";
            }
        }