Часто происходит так, что пользователь случайно внес изменения в документ или удалил чьи-то изменения или примечания в документе и нужно восстановить тело документа.
Тело документа можно восстановить из бэкапа, но может не оказаться бэкапа за нужное время, потому как документ может изменяться несколько раз в промежутке между бэкапами. Есть другой вариант, правда с ограничениями.
Чтобы понять, как можно восстановить тело документа и какие есть ограничения, давайте кратко рассмотрим схему работы сервиса хранилищ.
Примечание: Если в системе настроено шифрование документов, то Сервис хранилищ обращается к сервису ключей, чтобы зашифровать или расшифровать содержимое документа.
Тела хранятся в папке файлового хранилища, но структура папок неочевидна, и по ИД документа/версии однозначно нельзя сказать, где лежит тело конкретной версии документа. Точнее, можно определить по идентификатору, но только актуальную версию документа с помощью sql запроса, но этот вариант нам не подходит.
По сути стоит задача найти идентификатор бинарных данных, помеченных на удаление:
1. Можно попробовать посмотреть содержимое папки deleted в папке файлового хранилища, и если там один файл, то просто берем этот идентификатор и переходим к пункту 3. Но сложность в том, что в этой папке может быть большое количество помеченных на удаление бинарных данных.
2. Определим идентификатор бинарных данных которые были помечены на удаление.
Span("durationMs": 5, "status": "Ok", "name": "Storage/Internal/Delete", "url": "http://localhost/Storage/Internal/Delete", "subtr": "1906b4d5-615c72", "identifiers": "[71cb98cc-231b-449f-8970-f03012be305a]")
где 71cb98cc-231b-449f-8970-f03012be305a – это идентификатор бинарных данных помеченных на удаление. Если найденных записей несколько, то можно сузить поиск по пользователю. 3. Запустим поиск в папке файлового хранилища по найденному идентификатору бинарных данных. Обратите внимание, что нас интересует файл не в папке deleted, а файл с расширением «blob».
4. Далее копируем найденный файл в свою папку и меняем расширение blob на нужное, в моем примере это docx.
5. Документ восстановлен.
Бинарное тело конечно можно вытащить из хранилища, мы для админов не делаем из этого секрета. Вопрос в другом: а надо ли об этом знать пользователям?
Пользователи, на мой взгляд, должны знать только про версии документов и уяснить для себя, что при больших правках документа нужно создать новую версию. Если каждый пользователь побежит к админу, чтобы он восстановил документ откуда потерялся абзац, то админ не вылезет из серверной.
Я бы сказала, тут важно настроить и контролировать возможность прямого доступа к файловому хранилищу у простых пользователей. И статья предполагала, что его у пользователей нет. Кстати - стоит про это сделать дисклеймер в статье. Иначе вопросы к инфобезопасности в целом.
Спасибо за статью! Много раз сталкивались с подобными запросами о восстановлении, но "разводили руками". Теперь будем пробовать восстанавливаться.
Отличная статья!! Спасибо!! Очень мало информации про внутреннюю кухню системы. Открыл для себя новое.
Сергей, согласен, что пользователи не должны злоупотреблять такой возможностью, но администратор думаю должен знать, что такая возможность есть и чтобы администратор в нужный момент смог воспользоваться ею.
Очень классная статья!! Спасибо!!
Насколько я помню, в RX нет так называемых "теневых копий" из 5ки ?
Если бы эту штуку вернули, было бы полезно для юзеров.
В реальной жизни полно ситуаций, когда документ заменяется по досадной ошибке.
Понятие теневых копий можно было бы расширить для RX - скажем хранить их неделю и только для каких-то видов документов. Этого более чем достаточно для восстановления.
Юрий, Заведите отдельную идею, по моему ее еще не было. Если наберет значительное кол-во голосов, то вероятность реализации увеличится.
Анатолий, https://club.directum.ru/idea/367118
Дополню статью информацией как еще можно выполнить поиск имени бинарных данных версий документов в ФХ:
https://club.directum.ru/webhelp/directumrx/web/index.html?sds_khranenie_informatcii_o_predydushchikh_telakh.htm
Авторизуйтесь, чтобы написать комментарий