DEV Community

Андрей Викулов (VProger)
Андрей Викулов (VProger)

Posted on • Originally published at viku-lov.ru on

Личный диск Bitrix24 не открывается и не загружаются файлы: восстановление Storage пользователя

Личный диск Bitrix24 не открывается и не загружаются файлы: восстановление Storage пользователя

Симптомы

На одном из порталов Bitrix24 возникла странная ситуация.

У администратора перестал открываться личный диск:

/company/personal/user/14254/disk/path/
Enter fullscreen mode Exit fullscreen mode

Вместо интерфейса диска отображалась обычная лента активности.

Дополнительно появилась ошибка при загрузке файлов через модуль Почта:

Недостаточно прав доступа для загрузки файла на сервер
Enter fullscreen mode Exit fullscreen mode

При этом:

  • пользователь являлся администратором;
  • права доступа были корректны;
  • свободное место на сервере присутствовало;
  • другие сотрудники работали без проблем.

Первичная диагностика

Первое подозрение падает на модуль Disk.

Проверяем наличие пользовательского Storage:

$userId = 14254;
$storage = \Bitrix\Disk\Driver::getInstance()
->getStorageByUserId($userId);
var_dump($storage);
Enter fullscreen mode Exit fullscreen mode

Результат:

NULL
Enter fullscreen mode Exit fullscreen mode

Для сравнения проверяем рабочего пользователя:

$userId = 5;
$storage = \Bitrix\Disk\Driver::getInstance()
->getStorageByUserId($userId);
var_dump($storage);
Enter fullscreen mode Exit fullscreen mode

Результат:

object(Bitrix\Disk\Storage)
Enter fullscreen mode Exit fullscreen mode

Что означает NULL

Каждый пользователь Bitrix24 имеет собственное хранилище файлов.

Оно хранится в таблице:

b_disk_storage
Enter fullscreen mode Exit fullscreen mode

Через него работают:

  • Личный диск;
  • Почта;
  • Чат;
  • Комментарии;
  • Задачи;
  • Прикрепление файлов.

Если Storage отсутствует, пользователь теряет возможность работать с файлами.


Проверка базы данных

Проверяем наличие записи:

SELECT *
FROM b_disk_storage
WHERE ENTITY_ID = 14254;
Enter fullscreen mode Exit fullscreen mode

Результат:

0 rows
Enter fullscreen mode Exit fullscreen mode

Запись отсутствовала.


Решение

Для восстановления хранилища используем штатный API Bitrix.

$userId = 14254;
$user = \Bitrix\Main\UserTable::getById($userId)->fetch();
$storage = \Bitrix\Disk\Driver::getInstance()
->addUserStorage($userId);
var_dump($storage);
Enter fullscreen mode Exit fullscreen mode

После выполнения метода 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;
}
}
Enter fullscreen mode Exit fullscreen mode

Почему это происходит

На практике такое встречается после:

  • восстановления резервной копии;
  • миграции портала;
  • ошибок обновления;
  • некорректного импорта пользователей;
  • ручного изменения таблиц базы данных.

Вывод

Если в Bitrix24 одновременно:

  • не открывается личный диск;
  • не прикрепляются файлы;
  • появляются ошибки доступа;

то первым делом проверьте наличие пользовательского Storage через:

\Bitrix\Disk\Driver::getInstance()
->getStorageByUserId($userId);
Enter fullscreen mode Exit fullscreen mode

Возвращаемый NULL почти всегда указывает на отсутствие персонального хранилища пользователя.

В большинстве случаев проблема решается штатным методом:

\Bitrix\Disk\Driver::getInstance()
->addUserStorage($userId);
Enter fullscreen mode Exit fullscreen mode

без вмешательства в базу данных и без переустановки модуля Disk.

Read more on Viku-Lov Studio

Top comments (0)