← Назад к справке

Администрирование

Проверка модулей и права доступа

Рабочая справка по проверке модулей и прав доступа в коробочном 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.

Источники