Может ли скрипт Google Apps, работающий в качестве надстройки редактора, использовать область действия https://www.googleapis.com/auth/drive.file? - PullRequest
2 голосов
/ 15 июня 2019

Я создаю надстройку Документов Google в скрипте Служб Google, и для некоторых функций требуется использование расширенного сервиса Google Диска, как описано в https://developers.google.com/apps-script/guides/services/advanced. После включения расширенного сервиса мой сценарийтеперь запрашиваю область действия https://www.googleapis.com/auth/drive, которая слишком широка для того, что я пытаюсь сделать - я только хочу коснуться файлов, с которыми пользователь фактически использует это дополнение, а не всего диска!Я бы предпочел использовать https://www.googleapis.com/auth/drive.file, который ограничен файлами, которые пользователь активно использует со сценарием.

Я попытался установить тег @OnlyCurrentDoc JSDoc, как указано в https://developers.google.com/gsuite/add-ons/concepts/scopes#editor_add-on_scopes, но это только изменяет расширенную область https://www.googleapis.com/auth/documents на https://www.googleapis.com/auth/documents.currentonly - это не меняет область действия Drive API.

Кроме того, я убедился, что сценарий действительно действительно нуженобласть действия auth/drive, поскольку, когда я вошел в манифест проекта и явно запросил auth/drive.file, я получил ответ 404 с вызовом API в drive.revisions.list, который завершился ошибкой: файл не найден: 1Sj_oq93ny5q9348ncyo8934nyc at getAuthors (Код: 54) на showSidebar (код: 20) .Это именно то, что я ожидаю от файла, который не был «помечен» для использования с этим сценарием.

Вот очень минимальное дополнение gdocs, которое показывает проблему:

function onOpen(e) {
  var menu = DocumentApp.getUi().createAddonMenu();
  menu.addItem("Get revisions", "getRevisions");
  menu.addToUi();
}


function getRevisions() {
  var docId = DocumentApp.getActiveDocument().getId();
  Logger.log("Document id: "+docId);
  var revs = Drive.Revisions.list(docId);
  Logger.log("Found revisions: "+revs.items.length);
}

Опять же, это прекрасно работает с областью действия auth/drive по умолчанию, но не с auth/drive.file.

В документации для https://www.googleapis.com/auth/drive.file указано, что она предоставляет «Доступ к файлам, созданным или открытым приложением для каждого файла». Авторизация файла предоставляется индивидуально для каждого пользователя и отменяется, когда пользователь деавторизует приложение ».в соответствии с документами на https://developers.google.com/drive/api/v2/about-auth#OAuth2Authorizing. Что не ясно: как Google определяет, какие файлы были «созданы или открыты приложением», особенно когда речь идет о дополнениях редактора?Я думаю, что любой документ с включенной надстройкой будет считаться «открытым приложением», но я думаю, что нет.Есть ли способ заставить эту область работать?

...