Авторизация для многих приложений на базе Apps Script проста, поскольку проект скрипта запрашивает любые недостающие разрешения, которые ему необходимы, когда кто-то пытается его использовать.
Модель авторизации для дополнений Редактора более сложна по нескольким причинам:
Когда пользователь создает файл, все установленные им надстройки отображаются в меню «Расширения» , даже если пользователь еще не авторизовал эти надстройки.
Эти дополнения работают с файлами на Google Диске, которыми можно поделиться с соавторами. Соавторы, у которых не установлено дополнение «Редактор», видят его в документах, где его использовал создатель файла.
Надстройки редактора автоматически запускают свои функции
onOpen()
при открытии документа.
Для защиты пользовательских данных применяются режимы авторизации, которые делают некоторые службы недоступными для onOpen()
. Это руководство поможет вам понять, что и когда может делать ваш код.
Модель авторизации
Режим авторизации дополнения «Редактор» зависит от его состояния, которое, в свою очередь, зависит от того, кто его использует: пользователь, установивший дополнение, или соавтор.
Редактор дополнений состояния
Надстройки редактора в меню «Расширения» установлены, включены или и то, и другое.
- Надстройка устанавливается для конкретного пользователя после того, как он или его администратор получает ее из Google Workspace Marketplace и разрешает ей доступ к своим данным Google.
- Надстройка включается в документе, форме, презентации или электронной таблице, когда кто-либо ее там использует.
- Когда люди работают над файлом совместно и один из них использует надстройку, она устанавливается для одного пользователя и активируется для файла.
В следующей таблице приведены различия между установленным и включённым состояниями. Обратите внимание, что при тестировании скрипта как надстройки вы можете запустить тест в одном из этих состояний или в обоих.
Установлено | Включено | |
---|---|---|
Применимо к | Пользователь | Документ, форма, презентация или электронная таблица |
Вызвано | Получение дополнения из магазина | Получение дополнения из магазина при использовании этого документа, формы, презентации или электронной таблицы, или Использование ранее установленного дополнения в этом документе, форме, презентации или электронной таблице |
Меню видно | Только этот пользователь во всех документах, формах, презентациях или электронных таблицах, которые он открывает или создает | Все участники, работавшие над этим документом, формой, презентацией или электронной таблицей |
Режим авторизации для onOpen() | AuthMode.NONE (если он также не включен , в этом случае AuthMode.LIMITED) | AuthMode.LIMITED |
Режимы авторизации
Функция onOpen()
надстройки «Редактор» запускается автоматически при открытии пользователем документа, формы, презентации или электронной таблицы. Для защиты данных пользователей Apps Script ограничивает возможности функции onOpen()
. Состояние надстройки «Редактор» определяет режим авторизации, в котором выполняется функция onOpen()
.
Если надстройка «Редактор» включена в файле, форме, презентации или электронной таблице, onOpen()
запускается в AuthMode.LIMITED
. Если надстройка не включена и установлена , onOpen()
запускается в AuthMode.NONE
.
В AuthMode.NONE
дополнение не может запускать определённые службы, пока пользователь не взаимодействует с ним, нажимая кнопки или выполняя пользовательские функции. Если ваше дополнение пытается использовать эти службы в onOpen()
, onInstall()
или в глобальной области действия, разрешения не предоставляются, а другие вызовы, например, заполнение меню, останавливаются . Поддерживается только вариант «Help».
Для выполнения ограниченных вызовов служб необходимо использовать режим авторизации AuthMode.FULL
. Функции взаимодействия с пользователем, такие как выбор пункта меню, выполняются только в этом режиме. После запуска кода в режиме AuthMode.FULL
дополнение сможет использовать все области действия, разрешенные пользователем.
Apps Script передает режим авторизации как свойство authMode
параметра события Apps Script, e
; значение e.authMode
соответствует константе в перечислении Apps Script ScriptApp.AuthMode
.
Режимы авторизации применяются ко всем методам выполнения Apps Script, включая запуск из редактора скриптов, из пункта меню или из вызова Apps Script google.script.run
. Однако свойство e.authMode
можно проверить только в том случае, если скрипт запускается в результате срабатывания триггера , например, onOpen()
, onEdit()
или onInstall()
. Пользовательские функции в Google Таблицах используют собственный режим авторизации AuthMode.CUSTOM_FUNCTION
, который похож на LIMITED
, но имеет несколько иные ограничения. Во всех остальных случаях скрипты запускаются в AuthMode.FULL
, как описано в следующей таблице.
NONE | LIMITED | CUSTOM_FUNCTION | FULL | |
---|---|---|---|---|
Происходит для | onOpen() (если пользователь установил надстройку, но не включил ее в документе, форме, презентации или электронной таблице) | onOpen() (все остальные времена)onEdit() (только в Таблицах) | Пользовательские функции | Все остальное время, включая: устанавливаемые триггеры onInstall() google.script.run |
Доступ к данным пользователей | Только локаль | Только локаль | Только локаль | Да |
Доступ к документу, форме, презентации или электронной таблице | Нет | Да | Да — только для чтения | Да |
Доступ к пользовательскому интерфейсу | Добавить пункты меню | Добавить пункты меню | Нет | Да |
Доступ к Properties | Нет | Да | Да | Да |
Доступ к Jdbc , UrlFetch | Нет | Нет | Да | Да |
Другие услуги | Logger Utilities | Любые сервисы, не имеющие доступа к пользовательским данным | Любые сервисы, не имеющие доступа к пользовательским данным | Все услуги |
Жизненный цикл авторизации надстройки редактора
Если надстройка установлена для текущего пользователя или включена в текущем файле, она загружается для документа, формы, презентации или электронной таблицы при открытии этого файла. Надстройка отображается в меню «Расширения» и начинает прослушивать простые триггеры onInstall()
, onOpen()
и onEdit()
. Если пользователь щёлкает по пункту меню «Расширения» , она запускается .
Дополнение «Редактор» установлено.
При установке дополнения «Редактор» из магазина его функция onInstall()
выполняется в AuthMode.FULL
. В этом режиме авторизации дополнение может выполнять сложную процедуру настройки. Также следует использовать onInstall()
для создания пунктов меню, поскольку документ, форма, презентация или электронная таблица уже открыты, а функция onOpen()
ещё не запущена. В следующем примере показано, как вызвать функцию onOpen()
из функции onInstall()
:
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
Открыто дополнение «Редактор»
При открытии документа, формы, презентации или электронной таблицы загружаются все надстройки редактора, установленные текущим пользователем или включенные любым соавтором в файле, и вызываются все их функции onOpen()
. Режим авторизации, в котором запускается onOpen()
зависит от того, установлена или включена надстройка.
Если дополнение создаёт только базовое меню, режим не имеет значения. В следующем примере показана базовая функция onOpen()
:
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
.addItem('Insert chart', 'insertChart')
.addItem('Update charts', 'updateCharts')
.addToUi();
}
Чтобы добавлять динамические элементы меню на основе сохраненных свойств скрипта приложений, читать содержимое текущего файла или выполнять другие расширенные задачи, необходимо определить режим авторизации и обрабатывать его соответствующим образом.
В следующем примере показана расширенная функция onOpen()
, которая изменяет свое действие в зависимости от режима авторизации:
function onOpen(e) {
var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp.
if (e && e.authMode == ScriptApp.AuthMode.NONE) {
// Add a normal menu item (works in all authorization modes).
menu.addItem('Start workflow', 'startWorkflow');
} else {
// Add a menu item based on properties (doesn't work in AuthMode.NONE).
var properties = PropertiesService.getDocumentProperties();
var workflowStarted = properties.getProperty('workflowStarted');
if (workflowStarted) {
menu.addItem('Check workflow status', 'checkWorkflow');
} else {
menu.addItem('Start workflow', 'startWorkflow');
}
}
menu.addToUi();
}
Обратите внимание, что надстройки не могут открывать боковые панели и диалоговые окна при работе в AuthMode.LIMITED
. Вы можете использовать пункты меню для открытия боковых панелей и диалоговых окон, поскольку они работают в AuthMode.FULL
.
Пользователь запускает надстройку «Редактор»
Когда пользователь щёлкает по пункту меню « Расширения» , Apps Script сначала проверяет, установлено ли дополнение, и предлагает сделать это, если нет. Если пользователь авторизовал дополнение, скрипт запускает функцию, соответствующую пункту меню в AuthMode.FULL
. Дополнение включается в документе, форме, презентации или электронной таблице, если оно ещё не включено.
Устранение неполадок, связанных с отсутствием отображения дополнительных меню
Меню вашего дополнения может не отображаться, если ваш код неправильно управляет режимами авторизации. Например:
Надстройка пытается запустить службу Apps Script, которая не поддерживается текущим режимом авторизации.
Надстройка пытается выполнить вызов службы до того, как пользователь с ней взаимодействует.
Чтобы удалить или переупорядочить вызов службы, вызывающий ошибки разрешений в AuthMode.NONE
, попробуйте выполнить следующие действия:
- Откройте проект Apps Script для вашего дополнения и найдите функцию
onOpen()
. - Найдите в функции
onOpen()
упоминания служб Apps Script или связанных с ними объектов, таких какPropertiesService
,SpreadsheetApp
илиGmailApp
. - Если служба используется не только для создания элементов пользовательского интерфейса, удалите её или заключите в блок комментариев. Оставьте только следующие методы:
.getUi()
,.createMenu()
,.addItem()
и.addToUi()
. Также найдите и удалите все службы, находящиеся за пределами функции. - Определите функции, которые могут содержать строки кода, закомментированные или удалённые на предыдущем этапе, особенно те, которые используют создаваемую ими информацию, и перенесите вызовы служб в функции, которым они нужны. Перекомпонуйте или перепишите кодовую базу, чтобы учесть изменения, внесённые на предыдущих этапах.
Сохраните код и создайте тестовое развертывание.
При создании тестового развертывания убедитесь, что поле «Конфигурация» имеет значение «Установлено для текущего пользователя» , а текст под полем «Конфигурация» имеет значение «Тест в
AuthMode.None
Запустите тестовое развертывание и откройте меню «Расширения» .
Если отображаются все пункты меню, проблема устранена. Если отображается только меню «Справка» , вернитесь к шагу 1. Возможно, вы пропустили обращение в сервисный центр.