Администрирование
Проверка модулей и права доступа
Рабочая справка по проверке модулей и прав доступа в коробочном Bitrix24: Loader::includeModule, IsModuleInstalled, права на админку, файлы и папки.
Если код падает на классе CRM, IM или бизнес-процессов, сначала проверяю, подключён ли нужный модуль. Если не открывается админка или не пишутся файлы, проверяю права пользователя и права файловой системы.
Проверка модулей
Перед использованием классов модуля его нужно подключить.
includeModule
<?php
use Bitrix\Main\Loader;
/**
* Подключает модуль или выбрасывает исключение.
*/
function requireModule(string $module_id): void
{
if (!Loader::includeModule($module_id)) {
throw new \RuntimeException('Не удалось подключить модуль: ' . $module_id);
}
}
requireModule('crm');
requireModule('im');
requireModule('imopenlines'); Если модуль не подключился, его классы и таблицы могут быть недоступны.
Проверить установку модуля
<?php
/**
* Проверяет, установлен ли модуль.
*/
function hasInstalledModule(string $module_id): bool
{
return IsModuleInstalled($module_id);
}
$is_crm_installed = hasInstalledModule('crm');
var_dump($is_crm_installed); IsModuleInstalled() проверяет факт установки. Для работы с API модуля всё
равно нужен Loader::includeModule().
Список важных модулей
| Модуль | Когда нужен |
|---|---|
crm | CRM: сделки, лиды, контакты, компании, смарт-процессы. |
bizproc | Бизнес-процессы. |
im | Чаты и сообщения. |
imopenlines | Открытые линии. |
tasks | Задачи. |
disk | Файлы Диска. |
catalog | Торговый каталог и товары. |
sale | Интернет-магазин и заказы. |
Права доступа
Важно различать права пользователя в Битриксе и права файловой системы на сервере.
Права пользователей в админке
Если пользователь не может открыть административный раздел, проверь права группы на
доступ к /bitrix/admin/ и права конкретных модулей.
- пользователь входит в нужную группу;
- у группы есть доступ к административной части;
- у группы есть права на нужный модуль;
- нет дополнительных ограничений в CRM, задачах или бизнес-процессах.
Права на файлы и папки
Если не создаются кеши, не пишутся логи или не загружаются файлы, проверяй права серверного пользователя на запись.
# Проверить владельца и права
ls -la /home/bitrix/www/local
ls -la /home/bitrix/www/bitrix/cache
ls -la /home/bitrix/www/upload
# Найти файлы, которые не принадлежат пользователю bitrix
find /home/bitrix/www -not -user bitrix -print | head Проверить доступность пути
<?php
use Bitrix\Main\IO\Directory;
use Bitrix\Main\IO\File;
/**
* Проверяет путь для записи.
*/
function checkWritablePath(string $relative_path): array
{
$absolute_path = $_SERVER['DOCUMENT_ROOT'] . $relative_path;
return [
'path' => $absolute_path,
'is_exists' => file_exists($absolute_path),
'is_writable' => is_writable($absolute_path),
'is_directory' => is_dir($absolute_path),
];
}
$result = checkWritablePath('/local/logs');
print_r($result); Диагностика
Небольшой проверочный скрипт помогает быстро понять состояние окружения.
Проверочный скрипт
<?php
use Bitrix\Main\Loader;
require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
/**
* Проверяет список модулей.
*/
function checkModules(array $module_ids): array
{
$results = [];
foreach ($module_ids as $module_id) {
$results[$module_id] = [
'is_installed' => IsModuleInstalled($module_id),
'is_included' => Loader::includeModule($module_id),
];
}
return $results;
}
/**
* Проверяет папки на запись.
*/
function checkWritableDirectories(array $relative_paths): array
{
$results = [];
foreach ($relative_paths as $relative_path) {
$absolute_path = $_SERVER['DOCUMENT_ROOT'] . $relative_path;
$results[$relative_path] = [
'is_exists' => file_exists($absolute_path),
'is_writable' => is_writable($absolute_path),
];
}
return $results;
}
$diagnostics = [
'modules' => checkModules([
'crm',
'bizproc',
'im',
'imopenlines',
'tasks',
'disk',
]),
'directories' => checkWritableDirectories([
'/local',
'/local/logs',
'/bitrix/cache',
'/bitrix/managed_cache',
'/upload',
]),
];
echo '<pre>';
print_r($diagnostics);
echo '</pre>'; Частые причины ошибок
- забыли подключить модуль через
Loader::includeModule(); - модуль не установлен на портале;
- код выполняется от пользователя без нужных прав;
- серверный пользователь не может писать в кеш или upload;
- после копирования файлов сбился владелец;
- локальный модуль установлен, но его классы не зарегистрированы в autoload.