Невозможно удалить действующего пользователя из прав редактирования защищенного диапазона с помощью скрипта - листы Google

1

В листах Google я пытаюсь использовать скрипт для создания защищенного диапазона.

Я хотел бы, чтобы сценарий создавал защищенный диапазон, который ТОЛЬКО владелец может редактировать, и никто другой, однако скрипт должен работать, когда он запускается для пользователя, который НЕ является владельцем.

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

Однако, когда я запускаю скрипт во время входа в систему как пользователь, который НЕ является владельцем, разрешения защищенного диапазона позволяют ОБОИХ пользователю и владельцу возможность редактировать диапазон. Я знаю эту страницу и эту страницу в документации разработчиков Google, однако я не вижу ничего, что мне поможет.

Вот мой код:

function setProtections() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var owner = ss.getOwner();
  var effectiveUser = Session.getEffectiveUser();
  var range = ss.getRange('G1:G10');
  var protection = range.protect()
  var editors = protection.getEditors();
  protection.removeEditors(editors);
  protection.addEditor(owner);
}

Может ли кто-нибудь помочь?

Теги:
google-sheets

1 ответ

0
Лучший ответ

removeEditors() не позволяет удалить текущего пользователя:

Удаляет данный массив пользователей из списка редакторов для защищенного листа или диапазона. Обратите внимание: если кто-либо из пользователей является членом группы Google, у которой есть разрешение на редактирование, или если у всех пользователей домена есть разрешение на редактирование, эти пользователи все равно смогут редактировать защищаемую область. Ни владелец таблицы, ни текущий пользователь не могут быть удалены.

Тем не менее, вы можете использовать Installable Trigger, созданный владельцем, который будет запускать ваш setProtections() как пользователь, создавший Trigger [ owner ] - даже если он запускается другим пользователем.

Пример: Installable Trigger onEdit()

function installedOnEditTrigger (e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];

  //Checks if the sheet edit happened in the 7th column "G"
  if (e.range.getColumn() == 7) {
    var range = ss.getRange('G1:G10');
    var protection = range.protect()
    var editors = protection.getEditors();
    //Removes all editors - owners can not be removed
    protection.removeEditors(editors);
  }
}
  • 0
    Как пользователь «A», я не смог инициировать устанавливаемый триггер, принадлежащий пользователю «B».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню