Всех пользователей «Битрикс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 присутствуют альтернативные методы решения данной задачи. И здесь их тоже несколько. Есть устаревший метод 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()
— проверяет является ли пользователь сотрудником компании. Ознакомиться с исходным кодом метода можно здесь. Базируется он все на той же проверке привязки пользователя к департаментам.
Каким из вариантов пользоваться — решать вам. Все три — вполне жизнеспособны, на мой взгляд, для решения большинства задач — достояно первых двух.
Оставить комментарий