Проблемы с пониманием режимов авторизации

Я пытаюсь создать надстройку Google Таблиц, которая будет работать на боковой панели. Это мой первый, и мне тяжело работать в режимах аутентификации.

Это документ, который я использую для ссылки.

Когда кто-то в моей организации устанавливает сценарий, они видят заголовок меню, но надстройка не может загрузить элементы меню. Журнал показывает, что Exception: You do not have permission to call getScriptProperties at .... Это из библиотеки, которую я написал и на которую ссылаюсь в своем скрипте. Когда они используют его в документе, в котором я использовал его раньше, они могут видеть пункты меню.

Судя по этой диаграмме, похоже, что этот пользователь находится в режиме AuthMode.NONE, поскольку не может получить доступ к свойствам.

введите описание изображения здесь

Это код, который у меня есть в верхней части моего файла.

function onInstall(e) {
    onOpen(e);
}

function onOpen(e) {
    console.info('onOpen(e) fired')
    var menu = SpreadsheetApp.getUi().createAddonMenu(); // Or DocumentApp or FormApp.

    if (e && e.authMode == ScriptApp.AuthMode.NONE) {
        console.info("(e && e.authMode == ScriptApp.AuthMode.NONE)")
        // Add a normal menu item (works in all authorization modes).
        menu.addItem("Show Sidebar", "showSidebar");
        menu.addToUi();
    } else {
        // Add a new menu (doesn't work in AuthMode.NONE).
        log("not (e && e.authMode == ScriptApp.AuthMode.NONE)")
        var topUI = SpreadsheetApp.getUi();
        topUI.createMenu("Test Set Creator")
            .addItem("Show Sidebar", "showSidebar")
            .addToUi();
    }
    console.info(`The user is ${e.user}`)
    console.info(`The user's auth mode is ${e.authMode}`)
    console.info(`The source is ${e.source}`)
}

По сути, я хочу, чтобы пользователь установил надстройку, а затем смог использовать ее в любой электронной таблице в домене организации, а не только там, где она использовалась раньше. Мне сложно понять, как работают разные режимы аутентификации и как они меняются для каждого пользователя / для каждого листа. Если пользователь должен авторизовать надстройку при ее установке, почему бы ему не получить доступ к надстройке в новой электронной таблице, которую они открывают?

Вот еще несколько ресурсов, которые я пытался использовать: Google Doc onOpen не срабатывает при доступе к таблице


person pcdr    schedule 14.07.2020    source источник


Ответы (1)


Соображения

  1. Опубликованные надстройки автоматически добавят пункты меню в соответствующее меню надстройки:

Предупреждение: Неопубликованные надстройки также могут создавать настраиваемые меню верхнего уровня, но они автоматически перемещаются в меню надстроек, если надстройка опубликована и может не привести к желаемому пользовательскому опыту. Если вы собираетесь опубликовать надстройку, всегда используйте Ui.createAddonMenu () для определения меню надстройки.

  1. onOpen() функция предназначена для AuthMode.NONE выполнения в первый раз для каждого документа. Если вы уже авторизовали надстройку для другого документа, при открытии нового документа у вас не будет запрашиваться авторизация снова. Однако это не позволит вам запустить первую onOpen() функцию в AuthMode.LIMITED. Это означает, что вы всегда должны запускать аутентификацию, требующую операций, с помощью пунктов меню «Добавить».

Имейте в виду, что во второй раз, когда вы откроете документ, функция onOpen() запустится в AuthMode.LIMITED, это означает, что обновление страницы поможет. Тем не менее, если вы нашли способ снова запустить функцию onOpen(), это поведение может быть получено автоматически.

Я советую создать голосовое меню в надстройке, которое в основном запускает функции надстройки, создает правильные элементы меню и пользовательские интерфейсы. Таким образом вы не создадите путаницу между новыми пользователями и теми, кто уже успешно завершил процесс авторизации.

использованная литература

Дополнительные меню

Жизненный цикл авторизации

person Alessandro    schedule 15.07.2020