Autoryzacja wielu aplikacji opartych na Apps Script jest prosta, ponieważ projekt skryptu prosi o wszystkie brakujące uprawnienia, gdy ktoś próbuje go użyć.
Model autoryzacji w przypadku dodatków do edytora jest bardziej złożony z kilku powodów:
Gdy użytkownik utworzy plik, wszystkie zainstalowane przez niego dodatki będą widoczne w menu Rozszerzenia, nawet jeśli użytkownik nie autoryzował jeszcze tych dodatków.
Te dodatki działają w przypadku plików na Dysku Google, które można udostępniać współpracownikom. Współpracownicy, którzy nie mają zainstalowanego dodatku Edytor, widzą go w dokumentach, w których użył go twórca pliku.
Dodatki do edytora automatycznie uruchamiają swoje
onOpen()
funkcje po otwarciu dokumentu.
Aby chronić dane użytkowników, stosujemy tryby autoryzacji, które sprawiają, że niektóre usługi są niedostępne dla onOpen()
. Ten przewodnik pomoże Ci zrozumieć, co i kiedy może robić Twój kod.
Model autoryzacji
Tryb autoryzacji dodatku Edytora zależy od jego stanu, który z kolei zależy od tego, kto go używa: użytkownik, który zainstalował dodatek, czy współpracownik.
Stany dodatku do edytora
Dodatki do edytora w menu Rozszerzenia są zainstalowane, włączone lub jedno i drugie.
- Dodatek jest instalowany na koncie konkretnego użytkownika, gdy on lub jego administrator pobierze go z Google Workspace Marketplace i autoryzuje dostęp do danych Google.
- Dodatek jest włączony w dokumencie, formularzu, prezentacji lub arkuszu kalkulacyjnym, gdy ktoś go tam używa.
- Gdy kilka osób współpracuje nad plikiem i jedna z nich używa dodatku, jest on instalowany dla tego użytkownika i włączany w pliku.
W tabeli poniżej znajdziesz podsumowanie różnic między stanami „zainstalowano” i „włączono”. Pamiętaj, że gdy testujesz skrypt jako dodatek, możesz uruchomić test w jednym z tych stanów lub w obu.
Zainstalowano | Włączono | |
---|---|---|
Dotyczy: | Użytkownik | dokument, formularz, prezentacja lub arkusz kalkulacyjny; |
Powód | Pobieranie dodatku ze sklepu | pobieranie dodatku ze sklepu podczas korzystania z dokumentu, formularza, prezentacji lub arkusza kalkulacyjnego; korzystanie z wcześniej zainstalowanego dodatku w dokumencie, formularzu, prezentacji lub arkuszu kalkulacyjnym. |
Menu widoczne dla | Tylko ten użytkownik we wszystkich dokumentach, formularzach, prezentacjach lub arkuszach kalkulacyjnych, które otworzy lub utworzy. | wszyscy współpracownicy w tym dokumencie, formularzu, prezentacji lub arkuszu kalkulacyjnym; |
Tryb autoryzacji dla usługi onOpen() |
AuthMode.NONE (chyba że jest też włączona, w którym to przypadku AuthMode.LIMITED) |
AuthMode.LIMITED |
Tryby autoryzacji
Funkcja onOpen()
dodatku do edytora jest uruchamiana automatycznie, gdy użytkownik otworzy dokument, formularz, prezentację lub arkusz kalkulacyjny.
Aby chronić dane użytkowników, Apps Script ogranicza możliwości funkcji
onOpen()
. Stan dodatku do edytora
określa, w którym trybie autoryzacji działa funkcja onOpen()
.
Jeśli dodatek Edytora jest włączony w pliku, formularzu, prezentacji lub arkuszu kalkulacyjnym, onOpen()
działa w AuthMode.LIMITED
. Jeśli dodatek nie jest włączony i jest tylko zainstalowany, onOpen()
działa w AuthMode.NONE
.
W AuthMode.NONE
dodatek nie może uruchamiać niektórych usług, dopóki użytkownik nie wejdzie z nim w interakcję, klikając go lub uruchamiając funkcje niestandardowe. Jeśli dodatek próbuje używać tych usług w zakresie onOpen()
, onInstall()
lub globalnym, uprawnienia nie działają, a inne wywołania, np. wypełnianie menu, są przerywane. Pomoc to jedyna obsługiwana opcja.
Aby wykonywać wywołania usług z ograniczeniami, musisz używać trybu autoryzacji AuthMode.FULL
. Funkcje interakcji użytkownika, takie jak kliknięcie opcji menu, działają tylko w tym trybie. Po uruchomieniu kodu w trybie AuthMode.FULL
dodatek może używać wszystkich zakresów, na które użytkownik wyraził zgodę.
Apps Script przekazuje tryb autoryzacji jako właściwość authMode
parametru zdarzenia Apps Script, e
; wartość e.authMode
odpowiada stałej w wyliczeniu ScriptApp.AuthMode
Apps Script.
Tryby autoryzacji dotyczą wszystkich metod wykonywania skryptów Apps Script, w tym uruchamiania z edytora skryptów, z elementu menu lub z wywołania Apps Scriptgoogle.script.run
. Właściwość e.authMode
można jednak sprawdzić tylko wtedy, gdy skrypt jest uruchamiany w wyniku wyzwalacza, takiego jak onOpen()
, onEdit()
lub onInstall()
. Funkcje niestandardowe w Arkuszach Google korzystają z własnego trybu autoryzacji AuthMode.CUSTOM_FUNCTION
, który jest podobny do trybu LIMITED
, ale ma nieco inne ograniczenia. We wszystkich pozostałych przypadkach skrypty są uruchamiane w AuthMode.FULL
, co opisano w tabeli poniżej.
NONE |
LIMITED |
CUSTOM_FUNCTION |
FULL |
|
---|---|---|---|---|
Występuje w przypadku | onOpen() (jeśli użytkownik zainstalował dodatek, ale nie włączył go w dokumencie, formularzu, prezentacji lub arkuszu kalkulacyjnym); |
onOpen() (w pozostałych przypadkach)onEdit() (tylko w Arkuszach) |
Funkcje niestandardowe | W pozostałych przypadkach, w tym: aktywatory instalowane onInstall() google.script.run |
Dostęp do danych użytkownika | Tylko ustawienia regionalne | Tylko ustawienia regionalne | Tylko ustawienia regionalne | 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 Properties |
Nie | Tak | Tak | Tak |
Dostęp do Jdbc , UrlFetch |
Nie | Nie | Tak | Tak |
Inne usługi | Logger Utilities |
Usługi, które nie mają dostępu do danych użytkownika | Usługi, które nie mają dostępu do danych użytkownika | Wszystkie usługi |
Cykl autoryzacji dodatku do edytora
Gdy dodatek jest zainstalowany dla bieżącego użytkownika lub włączony w bieżącym pliku, jest on wczytywany w dokumencie, formularzu, prezentacji lub arkuszu kalkulacyjnym po otwarciu tego pliku. Dodatek jest widoczny w menu Rozszerzenia i zaczyna nasłuchiwać proste wyzwalacze onInstall()
, onOpen()
i onEdit()
. Jeśli użytkownik kliknie element menu Rozszerzenia, zostanie on uruchomiony.
Dodatek do edytora jest zainstalowany.
Gdy dodatek do Edytora zostanie zainstalowany ze sklepu, jego funkcja onInstall()
będzie działać w AuthMode.FULL
. W tym trybie autoryzacji dodatek może uruchamiać złożoną procedurę konfiguracji. Używaj też znaku onInstall()
do tworzenia elementów menu, ponieważ dokument, formularz, prezentacja lub arkusz kalkulacyjny są już otwarte, a funkcja onOpen()
nie została jeszcze uruchomiona.
Poniższy przykład pokazuje, jak wywołać funkcję onOpen()
z funkcji onInstall()
:
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
Otworzy się dodatek do edytora.
Gdy otworzysz dokument, formularz, prezentację lub arkusz kalkulacyjny, wczytane zostaną wszystkie dodatki do edytora, które są zainstalowane przez bieżącego użytkownika lub które zostały włączone w pliku przez dowolnego współpracownika. Następnie wywoływane są funkcje onOpen()
każdego z nich. Tryb autoryzacji, w którym działa onOpen()
, zależy od tego, czy dodatek jest zainstalowany lub włączony.
Jeśli dodatek tworzy tylko podstawowe menu, tryb nie ma 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 elementy menu na podstawie zapisanych właściwości Apps Script, odczytać zawartość bieżącego pliku lub wykonać inne zaawansowane zadania, musisz określić tryb autoryzacji i odpowiednio go obsłużyć.
Poniższy przykład przedstawia zaawansowaną funkcję onOpen()
, która zmienia swoje 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 dialogowych podczas wykonywania w AuthMode.LIMITED
. Możesz używać elementów menu
do otwierania pasków bocznych i okien, ponieważ działają one w AuthMode.FULL
.
Użytkownik uruchamia dodatek do edytora
Gdy użytkownik kliknie element menu Rozszerzenia, Apps Script najpierw sprawdzi, czy użytkownik zainstalował dodatek, a jeśli nie, poprosi go o to. Jeśli użytkownik autoryzował dodatek, skrypt uruchamia funkcję odpowiadającą elementowi menu w AuthMode.FULL
. Dodatek zostanie włączony w dokumencie, formularzu, prezentacji lub arkuszu kalkulacyjnym, jeśli nie był jeszcze włączony.
Rozwiązywanie problemów z niewyświetlaniem się menu dodatków
Menu dodatku może się nie wyświetlać, jeśli kod nie zarządza prawidłowo trybami autoryzacji. Na przykład:
Dodatek próbuje uruchomić usługę Apps Script, która nie jest obsługiwana w bieżącym trybie autoryzacji.
Dodatek próbuje wykonać wywołanie usługi, zanim użytkownik wejdzie z nim w interakcję.
Aby usunąć lub zmienić kolejność wywołania usługi, które powoduje błędy uprawnień w AuthMode.NONE
, wykonaj te czynności:
- Otwórz projekt Apps Script dla dodatku i znajdź funkcję
onOpen()
. - Wyszukaj w funkcji
onOpen()
wzmianki o usługach Apps Script lub powiązanych z nimi obiektach, takich jakPropertiesService
,SpreadsheetApp
lubGmailApp
. - Jeśli usługa jest używana do czegoś innego niż tworzenie elementów interfejsu, usuń ją lub umieść w bloku komentarza.
Pozostaw tylko te metody:
.getUi()
,.createMenu()
,.addItem()
i.addToUi()
. Znajdź i usuń też wszystkie usługi, które nie są powiązane z funkcją. - Znajdź funkcje, które mogą zawierać wiersze kodu skomentowane lub usunięte w poprzednim kroku, zwłaszcza te, które korzystają z generowanych przez nie informacji, i przenieś wywołania usług do funkcji, które ich potrzebują. Zmień układ lub przepisz kod, aby uwzględnić zmiany wprowadzone w poprzednich krokach.
Zapisz kod i utwórz testowe wdrożenie.
Podczas tworzenia wdrożenia testowego upewnij się, że w polu Konfiguracja jest zaznaczona opcja Zainstalowano dla bieżącego użytkownika, a tekst pod polem Konfiguracja brzmi: Testowanie w
AuthMode.None
.Uruchom wdrożenie testowe i otwórz menu Rozszerzenia.
Jeśli wszystkie elementy menu są wyświetlane, problem został rozwiązany. Jeśli widzisz tylko menu Pomoc, wróć do kroku 1. Możesz mieć nieodebrane połączenie z serwisu.