Правильный способ получения списка пользовательских папок при помощи DataManagement API
Вот ошибка, которую я делал при попытке перечислить папки в проекте аутентифицированного пользователя с помощью API Forge DataManagement:
- Получение доступа к деталям проекта
- Захват идентификатора корневой папки
- ... и перечисление содержимого этой папки.
Этот подход работает только до тех пор, пока пользователь является администратором проекта, поэтому у меня не было проблем при тестировании с моей учетной записью.
Код выглядел следующим образом:
- this.dmAPI.getProject(
- node.hubId, node.projectId).then((project) => {
- const rootId = project.data.relationships.rootFolder.data.id
- this.dmAPI.getFolderContent(
- node.projectId, rootId).then((folderItemsRes) => {
- // Перечислить все элементы папок
- })
Однако для другого пользователя, которому был предоставлен доступ к проекту или определенной папке, который не является администратором, этот подход неверен. Самый верный способ сделать это - использовать конкретную конечную точку, которая была добавлена чуть позже: GET hubs/:hub_id/projects/:project_id/topFolders
Как указано в документации, эта конечная точка
Возвращает сведения о папках самого высокого уровня, к которым у пользователя есть доступ для данного проекта. Пользователь должен иметь как минимум доступ для чтения к папкам.
Если пользователь имеет доступ к корневой папке проекта, это вернёт только сведения о корневой папке. Если пользователь не имеет доступа к корневой папке, это вернёт сведения обо всех папках самого высокого уровня в иерархии папок, к которой пользователь имеет доступ.
Обратите внимание: когда пользователи имеют доступ к папке, доступ автоматически предоставляется и ее подпапкам.
Правильный код теперь выглядит следующим образом, где я обернул запрос REST при помощи пользовательского объекта API:
- this.dmAPI.getProjectTopFolders(
- node.hubId, node.projectId).then((folderItemsRes) => {
- // Перечислить элементы папок рекурсивно ...
- })
Это просто сокращенная версия фактического кода, который запускается в моем демонстрационном приложении. Полный код может асинхронно и рекурсивно загружать все папки, подпапки и элементы под каждой учетной записью пользователя и отображать их в виде дерева. Это один из самых сложных асинхронных кодов, которые мне пришлось написать ... Вы можете посмотреть на это здесь.
Полный код проекта расположен здесь и живая демонстрация находится здесь: https://dm.autodesk.io
Снимок экрана 2017-04-07 в 11.43.10.png
Источник: https://forge.autodesk.com/blog/right-way-list-user-folders-datamanagement-api
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 18.04.2017