Симптомы
На одном из порталов Bitrix24 возникла странная ситуация.
У администратора перестал открываться личный диск:
/company/personal/user/14254/disk/path/
Вместо интерфейса диска отображалась обычная лента активности.
Дополнительно появилась ошибка при загрузке файлов через модуль Почта:
Недостаточно прав доступа для загрузки файла на сервер
При этом:
- пользователь являлся администратором;
- права доступа были корректны;
- свободное место на сервере присутствовало;
- другие сотрудники работали без проблем.
Первичная диагностика
Первое подозрение падает на модуль Disk.
Проверяем наличие пользовательского Storage:
$userId = 14254;
$storage = \Bitrix\Disk\Driver::getInstance()
->getStorageByUserId($userId);
var_dump($storage);
Результат:
NULL
Для сравнения проверяем рабочего пользователя:
$userId = 5;
$storage = \Bitrix\Disk\Driver::getInstance()
->getStorageByUserId($userId);
var_dump($storage);
Результат:
object(Bitrix\Disk\Storage)
Что означает NULL
Каждый пользователь Bitrix24 имеет собственное хранилище файлов.
Оно хранится в таблице:
b_disk_storage
Через него работают:
- Личный диск;
- Почта;
- Чат;
- Комментарии;
- Задачи;
- Прикрепление файлов.
Если Storage отсутствует, пользователь теряет возможность работать с файлами.
Проверка базы данных
Проверяем наличие записи:
SELECT *
FROM b_disk_storage
WHERE ENTITY_ID = 14254;
Результат:
0 rows
Запись отсутствовала.
Решение
Для восстановления хранилища используем штатный API Bitrix.
$userId = 14254;
$user = \Bitrix\Main\UserTable::getById($userId)->fetch();
$storage = \Bitrix\Disk\Driver::getInstance()
->addUserStorage($userId);
var_dump($storage);
После выполнения метода Bitrix автоматически:
- создал Storage;
- создал корневую папку;
- зарегистрировал права доступа;
- восстановил структуру пользовательского диска.
Результат
После создания Storage:
✅ открылся личный диск
✅ заработала загрузка файлов
✅ исчезла ошибка доступа
✅ восстановилась работа почтовых вложений
Как найти других пользователей без Storage
Полезный скрипт для аудита портала:
$rsUsers = \Bitrix\Main\UserTable::getList([
'select' => ['ID', 'LOGIN']
]);
while ($user = $rsUsers->fetch())
{
$storage = \Bitrix\Disk\Driver::getInstance()
->getStorageByUserId($user['ID']);
if (!$storage)
{
echo $user['ID'] . ' | ' . $user['LOGIN'] . PHP_EOL;
}
}
Почему это происходит
На практике такое встречается после:
- восстановления резервной копии;
- миграции портала;
- ошибок обновления;
- некорректного импорта пользователей;
- ручного изменения таблиц базы данных.
Вывод
Если в Bitrix24 одновременно:
- не открывается личный диск;
- не прикрепляются файлы;
- появляются ошибки доступа;
то первым делом проверьте наличие пользовательского Storage через:
\Bitrix\Disk\Driver::getInstance()
->getStorageByUserId($userId);
Возвращаемый NULL почти всегда указывает на отсутствие персонального хранилища пользователя.
В большинстве случаев проблема решается штатным методом:
\Bitrix\Disk\Driver::getInstance()
->addUserStorage($userId);
без вмешательства в базу данных и без переустановки модуля Disk.

Top comments (0)