Битрикс24: как определить внешнего пользователя

Всех пользователей «Битрикс24» можно поделить на две большие группы: внешних и внутренних. Внутренние пользователи (Intranet-пользователь) — это сотрудники компании, они имеют привязку к департаменту в структуре компании. Для них может быть доступен широкий функционал: контроль рабочего времени, CRM, телефония и многое другое. Внешние пользователи (Extranet-пользователь) — пользователи с сильно ограниченными правами доступа. Такие пользователи не являются полноценными сотрудниками на портале и создаются в рамках внешних групп. Как правило, в качестве внешних пользователей добавляют поставщиков, партнеров и подрядчиков.

Внешнего пользователя можно перевести в статус сотрудника компании, то есть — сделать внутренним пользователем. Обратный процесс не предусмотрен. Если вы решите перевести сотрудника в экстранет, то потребуется заблокировать текущую учетную запись (уволить сотрудника), изменить его e-mail и заново выслать приглашение.

От теории переходим к практике. Задача: написать условие, с помощью которого можно было бы ограничить доступ внешним пользователям. Звучит достаточно просто, но у данной задачи есть несколько способов решения. Все примеры могут быть использованы на коробочной версии «Битрикс24».

Привязка к структуре компании

Как я уже упоминал ранее, сотрудник компании имеет привязку к департаменту. Соответственно, у extranet-пользователя такой привязки нет. Отсюда первое решение задачи. Поможет нам класс CUser. В примере я буду выполнять проверку с помощью метода CUser::GetByID, но вы можете воспользоваться и CUser::GetList.

$rsUser = CUser::GetByID($user_id);
$arUser = $rsUser->Fetch();
if (empty($arUser['UF_DEPARTMENT'][0])){
    echo 'Это внешний пользователь';
}else{
    echo 'Это сотрудник компании';
}

$user_id — уникальный идентификатор пользователя. Не забывайте, привязка сотрудника к департаментам может быть множественной.

Принадлежность к определенной группе пользователей

Ознакомиться со списком пользовательских групп можно в админ-панели: Настройки > Группы пользователей. Или просто перейти по ссылке вида /bitrix/admin/group_admin.php.

В моем случае все пользователи экстранета входят в группу с уникальным ID 14. У вас это значение может отличаться. Условие будет выглядеть так:

if(CSite::InGroup(array(14))){
    echo 'Это внешний пользователь';
}else{
    echo 'Это сотрудник компании';
}

Переходим к третьем и последнему способу.

Определение внешнего пользователя методами «Битрикс24»

Предыдущие два способа достаточно универсальны и работают как в «Битрикс Управление Сайтом», так и в коробочной версии «Битрикс24». Логично предположить, что внутри Б24 присутствуют альтернативные методы решения данной задачи. И здесь их тоже несколько. Есть устаревший метод CExtranet::IsExtranetUser() внутри которого осуществляется вызов CExtranet::GetExtranetUserGroupID(). Данный метод по сути повторяет наше второе решение задачи, проверяя группу пользователя, правда здесь ее идентификатор получают из настроек сайта.

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

$user_type = (
Loader::includeModule("extranet")
&& \CExtranet::isExtranetSite()
&& !\CExtranet::isIntranetUser()
? 'extranet'
 : ''
);
if ($user_type=="extranet"){
    echo 'Это внешний пользователь';
}else{
    echo 'Это сотрудник компании';
}

Передавать ID пользователя в данном случае не требуется. Методы берут идентификатор пользователя, под которым данный код выполняется. CExtranet::IsExtranetSite() — проверяет на какой версии сайта выполняется запрос: для внешних пользователей предусмотрена отдельная версия сайта. CExtranet::isIntranetUser() — проверяет является ли пользователь сотрудником компании. Ознакомиться с исходным кодом метода можно здесь. Базируется он все на той же проверке привязки пользователя к департаментам.

Каким из вариантов пользоваться — решать вам. Все три — вполне жизнеспособны, на мой взгляд, для решения большинства задач — достояно первых двух.

Опубликовано: 27 февраля 2021 года, в рубрике «Битрикс».

Оставить комментарий

5000
  Подписаться  
Уведомление о
Поблагодарить автора статьи
Зачем это нужно