Проверка прав доступа и редирект пользователя
Быстрая проверка групп пользователя и редирект с примерами для разных сценариев доступа.
Как использовать
- Скопируйте нужный фрагмент кода.
- Вставьте в свой проект и при необходимости измените под задачу.
- Проверьте зависимости и окружение (версии, переменные).
Проверка прав доступа через группы пользователя и редирект при отсутствии доступа. Используйте для защиты страниц и разделов сайта.
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.