Autoryzacja dodatku edytora

Autoryzacja wielu aplikacji opartych na Apps Script jest prosta, ponieważ projekt skryptu prosi o brakujące uprawnienia, gdy ktoś próbuje aby z niej korzystać.

Model autoryzacji dla platformy Dodatki do edytora to są bardziej złożone z kilku powodów:

  • Gdy użytkownik utworzy plik, wszystkie dodatki, które on zainstaluje, są wymienione w menu Rozszerzenia, nawet jeśli użytkownik nie autoryzował jeszcze tych dodatków.

  • Te dodatki działają z plikami w Dysk Google, który można udostępniać współpracownikom. współpracowników, którzy tego nie robią; z zainstalowanym dodatkiem Edytor jest widoczny w dokumentach na którym twórca pliku go użył.

  • Dodatki do Edytora Google uruchamiają automatycznie dodatek onOpen() funkcje dostępne po otwarciu dokumentu.

Aby chronić dane użytkownika, stosowane są tryby autoryzacji, dzięki którym niektóre usługi niedostępne w usłudze onOpen(). Ten przewodnik pomoże Ci zrozumieć kod co i kiedy może zrobić.

Model autoryzacji

Tryb autoryzacji dodatku edytora zależy od jego stan zależnie od tego, kto go używa: użytkownik, który zainstalował dodatek. lub współpracownika.

Stany dodatku edytora

Dodatki edytora w menu Rozszerzenia to zainstalowana, włączona lub jedno i drugie.

  • Dodatek jest zainstalowany na danym urządzeniu. użytkownika po pobraniu go z Google Workspace Marketplace i autoryzowanie dostępu tej usługi do danych Google,
  • Dodatek jest włączony w dokumencie, formularzu prezentację lub arkusz kalkulacyjny, jeśli ktoś z nich korzysta.
  • Gdy ktoś współpracuje nad plikiem, a jedna z nich używa jest zainstalowany dla danego użytkownika. enabled.

W tabeli poniżej zebraliśmy różnice między zainstalowanymi i włączonymi. Pamiętaj, że gdy przetestowanie skryptu jako dodatku można przeprowadzić test w jednym lub w obu z tych stanów.

Zainstalowano Włączono
Dotyczy: Użytkownik Dokument, formularz, prezentacja lub arkusz kalkulacyjny
Powód Pobieranie dodatku ze sklepu Pobieranie dodatku ze sklepu podczas używania ten dokument, formularz, prezentację lub arkusz kalkulacyjny
korzystanie z wcześniej zainstalowanego dodatku, dokument, formularz, prezentacja lub arkusz kalkulacyjny
Menu widoczne dla Tylko ten użytkownik we wszystkich dokumentach, formularzach, prezentacjach czy arkuszy kalkulacyjnych, które otwierają lub tworzą wszystkich współpracowników nad tym dokumentem, formularzem, prezentacją lub arkusz kalkulacyjny
Tryb autoryzacji instancji onOpen()
(AuthMode.NONE) (chyba że jest również włączona. W takim przypadku AuthMode.LIMITED)
AuthMode.LIMITED

Tryby autoryzacji

Uruchomienie funkcji onOpen() w dodatku do edytora automatycznie, gdy użytkownik otworzy dokument, formularz, prezentację lub arkusz kalkulacyjny. Aby chronić użytkowników Apps Script ogranicza Funkcja onOpen() może wykonać zadania. Stan dodatku Edytor określa tryb autoryzacji, w którym działa funkcja onOpen().

Jeśli dodatek do Edytora jest włączony w pliku, formularz, prezentacja lub arkusz kalkulacyjny, onOpen() działa w AuthMode.LIMITED Jeśli dodatek nie jest włączony i jest Tylko zainstalowane, onOpen() działa w AuthMode.NONE.

W domenie AuthMode.NONE dodatek nie może uruchamiać określonych dopóki użytkownik nie wejdzie w interakcję z tym dodatkiem, po kliknięciu lub uruchomieniu funkcji niestandardowych. Jeśli dodatek próbuje korzystać z tych usług w aplikacji onOpen(), onInstall() lub zakresu globalnego, brak uprawnień i inne wywołania, takie jak uzupełnianie menu, zatrzymaj Jedyną obsługiwaną opcją jest Pomoc.

Aby uruchomić ograniczone wywołania usługi, musisz użyć autoryzacji AuthMode.FULL i trybu uzyskiwania zgody. funkcje interakcji użytkownika, takie jak kliknięcie opcji menu, które działają tylko w tym trybie. Po uruchomieniu kodu w trybie AuthMode.FULL parametr dodatek może używać wszystkich zakresów autoryzowanych przez użytkownika.

Apps Script przechodzi przez tryb autoryzacji jako właściwość authMode skryptu Apps Script, parametr zdarzenia, e; wartość e.authMode odpowiada stałej w Apps Script. Wyliczenie ScriptApp.AuthMode.

Tryby autoryzacji dotyczą wszystkich metod wykonywania Apps Script, Może to być na przykład uruchomienie w edytorze skryptów, z menu lub z Apps Script google.script.run. Pamiętaj jednak: właściwość e.authMode można sprawdzić tylko wtedy, gdy w wyniku działania skryptu zostanie uruchomiony reguły, np. onOpen(), onEdit() lub onInstall(). Funkcje niestandardowe w Arkuszach Google używają własnego trybu autoryzacji AuthMode.CUSTOM_FUNCTION, który jest podobny do LIMITED, ale ma nieco inne ograniczenia. Dla każdego w innych przypadkach skrypty uruchamiane w interfejsie AuthMode.FULL w sposób opisany poniżej tabeli.

NONE LIMITED CUSTOM_FUNCTION FULL
Występuje przez onOpen() (jeśli użytkownik zainstalował ale nie włączono go w dokumencie, formularzu prezentacji lub arkusza kalkulacyjnego) onOpen() (we wszystkich innych godzinach)
onEdit() (tylko w Arkuszach)
Funkcje niestandardowe Wszystkie inne godziny, w tym:
reguły, które można zainstalować
onInstall()
google.script.run
Dostęp do danych użytkownika Tylko język Tylko język Tylko język Tak
Dostęp do dokumentu, formularza, prezentacji lub arkusza kalkulacyjnego Nie Tak Tak, tylko do odczytu Tak
Dostęp do interfejsu Dodawanie pozycji menu Dodawanie pozycji menu Nie Tak
Dostęp do usługi Properties Nie Tak Tak Tak
Dostęp do usług Jdbc, UrlFetch Nie Nie Tak Tak
Inne usługi Logger
Utilities
Usługi, które nie mają dostępu do danych użytkowników Usługi, które nie mają dostępu do danych użytkowników Wszystkie usługi

Cykl autoryzacji dodatku do Edytora

Gdy dodatek jest zainstalowany dla bieżącego użytkownika lub włączone w bieżącym pliku, wczytanie dodatku dla dokumentu, formularza, prezentacji lub arkusz kalkulacyjny po otwarciu. Dodatek to w menu Rozszerzenia i rozpoczyna nasłuchiwanie proste reguły onInstall(), onOpen() i onEdit(). Jeśli użytkownik kliknie Rozszerzenia w menu, uruchamia się.

Dodatek Edytor jest zainstalowany

Gdy dodatek do Edytora zostanie zainstalowany ze sklepu, Funkcja onInstall() działa w AuthMode.FULL. W tym trybie autoryzacji może uruchomić złożoną rutynę konfiguracyjną. Wykonaj też użyj onInstall() do utworzenia pozycji menu, ponieważ dokument, formularz, prezentacja lub arkusz kalkulacyjny jest już otwarty, a funkcja onOpen() nie została uruchomiona. Z przykładu poniżej dowiesz się, jak wywołać funkcję onOpen() z funkcji onInstall():

function onInstall(e) {
  onOpen(e);
  // Perform additional setup as needed.
}

Dodatek Edytor jest otwarty

Po otwarciu dokumentu, formularza, prezentacji lub arkusza kalkulacyjnego jest on ładowany co dodatek Edytor, który zainstalował bieżący użytkownik, lub włączone przez wszystkich współpracowników w pliku, a także połączenia każdej z ich funkcji onOpen(). Tryb autoryzacji onOpen() jest uruchamiane w zależności od tego, czy dodatek jest zainstalowana lub włączona.

Jeśli dodatek utworzy tylko menu podstawowe, tryb bez znaczenia. Poniższy przykład przedstawia podstawową funkcję onOpen():

function onOpen(e) {
  SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
      .addItem('Insert chart', 'insertChart')
      .addItem('Update charts', 'updateCharts')
      .addToUi();
}

Aby dodać dynamiczne pozycje menu na podstawie zapisanych skryptów Apps Script właściwości, by odczytywać zawartość pakietów lub wykonać inne zaawansowane zadania, musi identyfikować tryb autoryzacji i prawidłowo go obsługiwać.

Poniższy przykład przedstawia zaawansowaną funkcję onOpen(), która zmienia swoją działanie w zależności od trybu autoryzacji:

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();
}

Pamiętaj, że dodatki nie mogą otwierać pasków bocznych ani okien podczas uruchamiania w AuthMode.LIMITED Możesz użyć pozycji menu aby otwierać paski boczne i okna, ponieważ są one uruchamiane w aplikacji AuthMode.FULL.

Użytkownik uruchamia dodatek do Edytora

Gdy użytkownik kliknie pozycję w menu Rozszerzenia, Apps Script najpierw sprawdza, czy użytkownik zainstalował oraz zachęca ich do tego, jeśli tak nie jest. Jeśli użytkownik autoryzował skrypt uruchamia funkcję, która odpowiada pozycji menu w AuthMode.FULL. dodatek jest włączony w dokumencie, formularzu prezentację lub arkusz kalkulacyjny, jeśli jeszcze go nie ma.

Rozwiązywanie problemów z nierenderowaniem menu dodatków

Menu dodatku może się nie renderować, jeśli Twój kod nie zarządza poprawnie trybami autoryzacji. Na przykład:

  • Dodatek próbuje uruchomić Apps Script usługa, która nie jest obsługiwana w bieżącym trybie autoryzacji.

  • Dodatek próbuje uruchomić wywołanie usługi, zanim użytkownik wchodzić z nią w interakcję.

Aby usunąć lub zmienić kolejność wywołań usługi, które powodują błędy uprawnień w AuthMode.NONE, spróbuj wykonać te czynności:

  1. Otwórz projekt Apps Script powiązany z Twoim dodatkiem i zlokalizuj go funkcję onOpen().
  2. Wyszukaj w funkcji onOpen() wzmianki o Apps Script związane z nimi usługi lub obiekty, PropertiesService, SpreadsheetApp lub GmailApp.
  3. Jeśli usługa jest używana nie tylko do tworzenia elementów interfejsu, usunąć lub umieścić w bloku komentarzy. Zostaw tylko te metody: .getUi(), .createMenu(), .addItem(), i .addToUi(). Znajdź i usuń wszelkie usługi, które są poza funkcją.
  4. Określ funkcje, które mogą zawierać skomentowane lub usunięte wiersze kodu zwłaszcza tym osobom, które wykorzystują uzyskane informacje, i przenosić wywołania usługi do funkcji, które ich potrzebują. Zmiana kolejności lub redagowania w bazie kodu, by uwzględnić zmiany wprowadzone w poprzednich krokach.
  5. Zapisz kod i utwórz wdrożenie testowe.

    Podczas tworzenia wdrożenia testowego upewnij się, że pole Konfiguracja Zainstalowano dla bieżącego użytkownika, a tekst pod polem konfiguracji brzmi: Przetestuj w: AuthMode.None

  6. Uruchom wdrożenie testowe i otwórz menu Rozszerzenia.

  7. Jeśli wyświetlają się wszystkie pozycje menu, problem został rozwiązany. Jeśli widzisz tylko menu Pomoc, wróć do kroku 1. Możliwe, że nie odebrałeś połączenia z zespołem pomocy.