Google Apps Script & Sheets - нужно ли делиться с полным чтением / записью? - PullRequest
1 голос
/ 13 июня 2019

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

Однако ...

Я хочу позволить пользователям хранить некоторые данные. По сути, у меня есть скрипт, который выбирает их адреса электронной почты и использует их для создания страницы в моей электронной таблице ...

К сожалению, конечно, для этого требуется предоставить им доступ на чтение / запись к листу ... и в интересах защиты данных пользователей, я бы предпочел этого не делать.

Но возможно ли и то и другое:

  1. Расширение доступа на чтение / запись (для листа) к самому моему приложению, БЕЗ обнародования листа, И
  2. Все еще есть доступ к адресу электронной почты пользователя?

Вещи, которые я изучил в этом процессе:

  • Я не могу получить доступ к адресу электронной почты пользователя, если разверну приложение для запуска от своего имени.
  • ключ API полезен только для открытых данных

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

function doGet(e) {
  if (!e.parameter.page) {
    var userCrewSheetName = getUserSheetName();
    var userCrewSheet = activeSpreadsheet.getSheetByName(userCrewSheetName);
    initializeSheet(userCrewSheet,userCrewSheetName);
    var userBonusSheetName = getUserSheetName("bonus");
    var userBonusSheet = activeSpreadsheet.getSheetByName(userBonusSheetName);
    initializeSheet(userBonusSheet,userBonusSheetName);
    return HtmlService.createTemplateFromFile('test').evaluate();
  }
  return HtmlService.createTemplateFromFile(e.parameter['page']).evaluate();
}

function initializeSheet(sheet,sheetName) {
  if(sheet == null) { 
    sheet = activeSpreadsheet.insertSheet();
    sheet.setName(sheetName);
    setHeaders(sheet,sheetName);
  }
}

function getUserSheetName(sheetType) {
  var userName = Session.getActiveUser().getEmail();
  if (!userName) { return };
  if(sheetType == "bonus") {
    return userName + '_my_bonus';
  } else {
    return userName + '_my_crew';
  }
  return "error";
}

1 Ответ

0 голосов
/ 13 июня 2019

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

Ваш ответ таков:вам нужно снова опубликовать ваше веб-приложение с помощью RunAs: Me.Таким образом, вы по-прежнему сможете захватывать идентификаторы пользователей, позволять им также считывать и записывать данные, не имея прямого доступа к редактированию вашей электронной таблицы при доступе к webApp, как и у вас.Ура !!

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