Как разрешить webapp создавать файлы в DriveApp - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть набор защищенных файлов электронных таблиц, к которым имеют доступ несколько пользователей. У каждого из них есть скрипт, который использует функции из одной библиотеки, которые запускают веб-приложение (которое позволяет пользователям запускать функции от имени администратора).

Я хочу дать пользователям возможность создать копию данного файла электронной таблицы. Теперь, если пользователь использует «Файл» -> «Создать копию», то:

  1. становится владельцем файла (администратор должен быть владельцем!), И пользователь должен изменить его вручную
  2. защита отключена для пользователя - администратор должен изменить его вручную.

Я решил добавить код в веб-приложение, которое запускается на учетной записи администратора:

DriveApp.getFileById(fileId).makeCopy();

Таким образом, копия файла будет сделана из учетной записи администратора. Это означает, что администратор будет владельцем файла, и защита будет работать для пользователей.

К сожалению, я получаю сообщение об ошибке:

Исключение: N ie masz uprawnień aby wywołać: DriveApp.getFileById. Wymagane uprawnienia: (https://www.googleapis.com/auth/drive.readonly || https://www.googleapis.com/auth/drive)

Я понимаю, что веб-приложение не имеет доступа к Google Диску. Можно ли разрешить только этому веб-приложению создавать новые файлы на диске?

Или есть ли другой способ (без веб-приложения) для пользователя создать копию файла и автоматизировать: включение защиты на пользователь и смена владельца файла?

In webapp File -> Proterties -> Scopes I have found:

Скрипт в файле

function stworzKopiePliku(){
  Kosztoryslibrary.stworzKopiePliku();
}

Скрипт в библиотеке

var url = "...";
function stworzKopiePliku(url){
  stworzKopieP(url);
}

function stworzKopieP() {
  var urlScript = SpreadsheetApp.getActiveSpreadsheet().getUrl();
  var fileId = SpreadsheetApp.getActiveSpreadsheet().getId(); 
  var type = "stworzKopiePliku";
  var urlParam = (url+"?urlScript="+urlScript+"&type="+type+"&fileId="+fileId);  

  var html = "<script>window.open('" + urlParam + "');google.script.host.close();</script>";
  var userInterface = HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModalDialog(userInterface, "skrypt w trakcie działania...");
}

Webapp

function doGet(e) {

  var urlScript = e.parameter.urlScript;
  var type = e.parameter.type;
  var fileId = e.parameter.fileId;

  if(type == "stworzKopiePliku"){
  DriveApp.getFileById(fileId).makeCopy();  
  }

}

Я использую очень похожий код во многих других функциях и все работает правильно. Единственная проблема заключается в том, что веб-приложение не имеет доступа к Google Drive для создания файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...