PHP
#bitrix#php#permissions#access#redirect#security#user-groups

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

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

Как использовать

  1. Скопируйте нужный фрагмент кода.
  2. Вставьте в свой проект и при необходимости измените под задачу.
  3. Проверьте зависимости и окружение (версии, переменные).

Проверка прав доступа через группы пользователя и редирект при отсутствии доступа. Используйте для защиты страниц и разделов сайта.

use Bitrix\Main\Application;

/**
 * Проверка прав и редирект
 * @param array|string $allowedGroups ID групп или код группы (например, [1, 2] или 'ADMIN')
 * @param string $redirectUrl Куда редиректить при отсутствии доступа
 * @return bool true если доступ есть
 */
function checkAccessAndRedirect($allowedGroups, $redirectUrl = '/') {
    global $USER;
    
    if (!$USER->IsAuthorized()) {
        LocalRedirect($redirectUrl);
        return false;
    }
    
    $userGroups = $USER->GetUserGroupArray();
    $allowed = is_array($allowedGroups) ? $allowedGroups : [$allowedGroups];
    
    // Проверяем по ID групп
    $hasAccess = !empty(array_intersect($userGroups, $allowed));
    
    // Если не по ID, проверяем по коду группы
    if (!$hasAccess) {
        $groupCodes = [];
        foreach ($allowed as $groupId) {
            $group = CGroup::GetByID($groupId)->Fetch();
            if ($group) {
                $groupCodes[] = $group['STRING_ID'] ?: $group['ID'];
            }
        }
        $hasAccess = !empty(array_intersect($userGroups, array_map('intval', $groupCodes)));
    }
    
    if (!$hasAccess) {
        LocalRedirect($redirectUrl);
        return false;
    }
    
    return true;
}

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

// 1. Только для авторизованных администраторов (группа ID=1)
checkAccessAndRedirect([1], '/auth/');

// 2. Для нескольких групп
checkAccessAndRedirect([1, 5, 7], '/access-denied/');

// 3. В компоненте или странице
if (!checkAccessAndRedirect([1], '/')) {
    return; // Редирект уже выполнен
}

// 4. С кастомным сообщением через сессию
if (!checkAccessAndRedirect([1], '/')) {
    $_SESSION['ACCESS_DENIED_MESSAGE'] = 'Доступ запрещён';
    return;
}

Usage:

Вызовите функцию в начале страницы или компонента. Если доступ отсутствует, выполнится редирект.

Notes:

⚠️ LocalRedirect() завершает выполнение скрипта. Для AJAX-запросов используйте JSON-ответ вместо редиректа. Группа с ID=1 — это администраторы по умолчанию в Bitrix.