У меня есть набор защищенных файлов электронных таблиц, к которым имеют доступ несколько пользователей. У каждого из них есть скрипт, который использует функции из одной библиотеки, которые запускают веб-приложение (которое позволяет пользователям запускать функции от имени администратора).
Я хочу дать пользователям возможность создать копию данного файла электронной таблицы. Теперь, если пользователь использует «Файл» -> «Создать копию», то:
- становится владельцем файла (администратор должен быть владельцем!), И пользователь должен изменить его вручную
- защита отключена для пользователя - администратор должен изменить его вручную.
Я решил добавить код в веб-приложение, которое запускается на учетной записи администратора:
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 для создания файлов.