Авторизация под админом без логина и пароля в Bitrix

Авторизация под админом без логина и пароля в Bitrix Наткнулся на днях в документации Bitrix’a на интересную (как мне показалось) функцию.
bool CUser::Authorize( int user_id )

Функция непосредственно осуществляет процесс авторизации пользователя. Инициализирует необходимые сессионные переменные и переменные объекта класса CUser. Если авторизация успешна, то возвращает «true», иначе — «false» (документация).

А вот, что интересно: функция принимает только ID пользователя. Проверка логина/пароля (видимо) по задумке разработчиков ложится на web-developer’ов. В отличии, например, от CUser::Login, которая перед авторизацией проверяет и логин, и пароль.
mixed CUser::Login( string login, string password, string set_auth_cookie = "N", string convert_password_to_md5 = "Y" )

Функция проверяет логин и пароль и если они корректные, то авторизует пользователя. Если авторизация успешная, то возвращает «true», иначе если логин и пароль некорректные, то возвращает массив с ошибкой для функции ShowMessage (документация).

В Битриксе все админы по умолчанию попадают в группу с id=1. Зная это получаем список администраторов сайта:

$filterUsers = array( 
    "GROUPS_ID" => array(1), 
); 
$paramsUsers = array( 
    "FIELDS" => array( 
    "ID", 
    "LOGIN", 
    "PASSWORD",
    "NAME", 
    "LAST_NAME", 
    "EMAIL", 
    "LAST_LOGIN", 
    "DATE_REGISTER"), 
); 
$dbUsers = CUser::GetList(($by='id'), ($order='asc'), $filterUsers, $paramsUsers);

Авторизуем при нажатии.

if ($_GET["id"]) 
{ 
    CUser::Authorize($_GET["id"]); 
}

И пробуем скрипт:

1.jpg

После нажатия на ссылку с логином:

2.jpg

В заключение весь код страницы

    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); 
    $APPLICATION->SetTitle("Песочница"); 
    if(!CModule::IncludeModule("iblock")) 
    { 
        $this->AbortResultCache(); 
        ShowError("IBLOCK_MODULE_NOT_INSTALLED"); 
        return false; 
    } 
    $users = array(); 
    $pageUrl = $_SERVER['REQUEST_URI']; 
    $filterUsers = array( 
        "GROUPS_ID" => 
        array(1), 
    ); 
    $paramsUsers = array( 
        "FIELDS" => array( 
            "ID", 
            "LOGIN", 
            "PASSWORD", 
            "NAME", 
            "LAST_NAME", 
            "EMAIL", 
            "LAST_LOGIN", 
            "DATE_REGISTER", 
        ), 
    ); 
    $dbUsers = CUser::GetList(($by='id'), ($order='asc'), $filterUsers, $paramsUsers); 
    echo "<table border="1px">"; 
    while ($arUsers = $dbUsers->Fetch()) 
    { 
        echo "<tr> 
            <td>" . $arUsers["ID"] . "</td> 
            <td><a href='" . $pageUrl . "?id=" . $arUsers["ID"] . "'>" . $arUsers["LOGIN"] . "</a></td> 
            <td>" . $arUsers["NAME"] . "</td> 
            <td>" . $arUsers["LAST_NAME"] . "</td> 
            <td>" . $arUsers["EMAIL"] . "</td> 
            <td>" . $arUsers["LAST_LOGIN"] . "</td> 
            <td>" . $arUsers["DATE_REGISTER"] . "</td> 
        </tr>"; 
    } 
    echo "</table>"; 
    if ($_GET["id"]) 
    { 
        CUser::Authorize($_GET["id"]); 
    } 
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");

UPD: Код не сработает в новых версиях Bitrix. Для авторизации можно использовать:

global $USER; 
$USER->Authorize(1);

Возврат к списку