Apps Komut Dosyası tabanlı birçok uygulamanın yetkilendirilmesi kolaydır. Bunun nedeni, komut dosyası projesinin, bir kullanıcı uygulamayı kullanmaya çalıştığında ihtiyaç duyduğu eksik izinleri istemesidir.
Düzenleyici eklentilerinin yetkilendirme modeli çeşitli nedenlerle daha karmaşıktır:
Bir kullanıcı dosya oluşturduğunda, yüklediği tüm eklentiler Uzantılar menüsünde listelenir. Bu eklentiler, kullanıcı tarafından henüz yetkilendirilmemiş olsa bile listelenir.
Bu eklentiler, Google Drive'da ortak çalışanlarla paylaşılabilen dosyalar üzerinde çalışır. Düzenleyen eklentisi yüklü olmayan ortak çalışanlar, dosyayı oluşturan kişinin kullandığı dokümanlarda eklentiyi görür.
Düzenleyici eklentileri, bir doküman açıldığında
onOpen()
işlevlerini otomatik olarak çalıştırır.
Kullanıcı verilerini korumak için bazı hizmetleri onOpen()
'a kapatan yetkilendirme modları uygulanır. Bu kılavuz, kodunuzun neler yapabileceğini ve ne zaman yapabileceğini anlamanıza yardımcı olabilir.
Yetkilendirme modeli
Bir Düzenleyici eklentisinin yetkilendirme modu, eklentinin durumuna bağlıdır. Eklentinin durumu ise eklentiyi kimin kullandığına (eklentiyi yükleyen kullanıcı veya bir ortak çalışan) bağlıdır.
Düzenleyici eklentisi durumları
Uzantılar menüsündeki düzenleyici eklentileri yüklenir, etkinleştirilir veya her ikisi de yapılır.
- Bir eklenti, Google Workspace Marketplace'ten alındıktan ve Google verilerine erişim yetkisi verildikten sonra belirli bir kullanıcı için yüklenir.
- Bir eklenti, doküman, form, sunu veya e-tabloda kullanıldığında etkinleştirilir.
- Bir dosya üzerinde ortak çalışan kullanıcılardan biri eklenti kullandığında eklenti, bu kullanıcı için yüklenir ve dosya için etkinleştirilir.
Aşağıdaki tabloda, yüklü ve etkin arasındaki farklar özetlenmektedir. Bir komut dosyasını eklenti olarak test ederken testi bu durumlardan birinde veya her ikisinde de çalıştırabileceğinizi unutmayın.
Yüklendi | Etkin | |
---|---|---|
Geçerlilik kapsamı: | Kullanıcı | Doküman, form, sunu veya e-tablo |
Yol açan neden: | Mağazadan eklenti edinme | İlgili dokümanı, formu, sunuyu veya e-tabloyu kullanırken mağazadan eklenti edinme ya da Daha önce yüklenmiş bir eklentiyi ilgili dokümanda, formda, sunuda veya e-tabloda kullanma |
Menü şu kullanıcılara görünür: | Yalnızca bu kullanıcı, açtığı veya oluşturduğu tüm dokümanlarda, formlarda, sunularda ya da e-tablolarda | İlgili doküman, form, sunu veya e-tablodaki tüm ortak çalışanlar |
onOpen() için yetkilendirme modu |
AuthMode.NONE (Aksi takdirde etkinleştirilmişse) AuthMode.LIMITED) |
AuthMode.LIMITED |
Yetkilendirme modları
Düzenleyici eklentisinin onOpen()
işlevi, kullanıcı bir dokümanı, formu, sunuyu veya e-tabloyu açtığında otomatik olarak çalışır.
Apps Komut Dosyası, kullanıcı verilerini korumak için onOpen()
işlevinin yapabileceklerini kısıtlar. Düzenleyici eklenti durumu, onOpen()
işlevinin hangi yetkilendirme modunda çalışacağını belirler.
Dosyada, formda, sunuda veya e-tabloda bir Düzenleyici eklentisi etkinleştirilmişse onOpen()
, AuthMode.LIMITED
içinde çalışır. Eklenti etkin değilse ve yalnızca yüklüyse, onOpen()
AuthMode.NONE
içinde çalışır.
AuthMode.NONE
içinde, kullanıcı eklentiyle etkileşime girip özel işlevleri tıklayana veya çalıştırana kadar eklenti belirli hizmetleri çalıştıramaz. Eklentiniz bu hizmetleri onOpen()
, onInstall()
veya genel kapsamda kullanmaya çalışırsa izinler başarısız olur ve menüleri doldurma gibi diğer çağrılar durdurulur. Yalnızca yardım seçeneği desteklenir.
Kısıtlanmış hizmet çağrılarını çalıştırmak için AuthMode.FULL
yetkilendirme modunu kullanmanız gerekir. Menü seçeneğini tıklama gibi kullanıcı etkileşimi işlevleri yalnızca bu modda çalışır. Kod AuthMode.FULL
modunda çalıştırıldıktan sonra eklenti, kullanıcının yetkilendirdiği tüm kapsamları kullanabilir.
Apps Komut Dosyası, yetkilendirme modunu Apps Komut Dosyası etkinlik parametresinin authMode
özelliği olarak iletir. e
e.authMode
değerine karşılık gelen değer, Apps Komut Dosyası ScriptApp.AuthMode
enum'ındaki bir sabittir.
Yetkilendirme modları, komut dosyası düzenleyiciden, menü öğesinden veya Apps Komut Dosyası google.script.run
çağrısından çalıştırma dahil olmak üzere tüm Apps Komut Dosyası yürütme yöntemleri için geçerlidir. Ancak e.authMode
özelliği yalnızca komut dosyası onOpen()
, onEdit()
veya onInstall()
gibi bir tetikleyici sonucunda çalıştırılıyorsa incelenebilir. Google E-Tablolar'daki özel işlevler, AuthMode.CUSTOM_FUNCTION
kendi yetkilendirme modunu kullanır. Bu mod, LIMITED
ile benzerdir ancak biraz farklı kısıtlamaları vardır. Diğer tüm durumlarda komut dosyaları, aşağıdaki tabloda açıklandığı gibi AuthMode.FULL
içinde çalışır.
NONE |
LIMITED |
CUSTOM_FUNCTION |
FULL |
|
---|---|---|---|---|
Şu durumlarda oluşur: | onOpen() (Kullanıcı bir eklenti yüklediyse ancak dokümanda, formda, sunuda veya e-tabloda etkinleştirmediyse) |
onOpen() (diğer tüm zamanlarda)onEdit() (yalnızca E-Tablolar'da) |
Özel işlevler | Aşağıdakiler dahil olmak üzere diğer tüm zamanlarda: Yüklenebilir tetikleyiciler onInstall() google.script.run |
Kullanıcı verilerine erişim | Yalnızca yerel ayar | Yalnızca yerel ayar | Yalnızca yerel ayar | Evet |
Dokümana, forma, sunuya veya e-tabloya erişim | Hayır | Evet | Evet — salt okunur | Evet |
Kullanıcı arayüzüne erişim | Menü öğesi ekleme | Menü öğesi ekleme | Hayır | Evet |
Properties erişimi |
Hayır | Evet | Evet | Evet |
Jdbc , UrlFetch erişimi |
Hayır | Hayır | Evet | Evet |
Diğer hizmetler | Logger Utilities |
Kullanıcı verilerine erişmeyen hizmetler | Kullanıcı verilerine erişmeyen hizmetler | Tüm hizmetler |
Düzenleyici eklentisinin yetkilendirme yaşam döngüsü
Eklenti, mevcut kullanıcı için yüklendiğinde veya mevcut dosyada etkinleştirildiğinde, söz konusu dosya açıldığında doküman, form, sunu ya da e-tablo için yüklenir. Eklenti, Uzantılar menüsünde listelenir ve onInstall()
, onOpen()
ve onEdit()
basit tetikleyicilerini dinlemeye başlar. Kullanıcı bir Uzantılar menü öğesini tıkladığında bu öğe çalışır.
Düzenleyici eklentisi yüklü olmalıdır.
Mağazadan bir Düzenleyici eklentisi yüklendiğinde onInstall()
işlevi AuthMode.FULL
içinde çalışır. Bu yetkilendirme modunda, eklenti karmaşık bir kurulum rutini çalıştırabilir. Doküman, form, sunu veya e-tablo zaten açık olduğundan ve onOpen()
işleviniz çalışmadığından menü öğeleri oluşturmak için de onInstall()
kullanmanız gerekir.
Aşağıdaki örnekte, onOpen()
işlevinin onInstall()
işlevinden nasıl çağrılacağı gösterilmektedir:
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
Düzenleyici eklentisi açılır.
Bir doküman, form, sunu veya e-tablo açıldığında, mevcut kullanıcının yüklediği ya da herhangi bir ortak çalışanın dosyada etkinleştirdiği her bir Düzenleyici eklentisi yüklenir ve her birinin onOpen()
işlevleri çağrılır. onOpen()
çalıştığı yetkilendirme modu, eklentinin yüklü veya etkin olup olmadığına bağlıdır.
Bir eklenti yalnızca temel bir menü oluşturuyorsa modun önemi yoktur. Aşağıdaki örnekte temel bir onOpen()
işlevi gösterilmektedir:
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
.addItem('Insert chart', 'insertChart')
.addItem('Update charts', 'updateCharts')
.addToUi();
}
Kayıtlı Apps Komut Dosyası özelliklerine göre dinamik menü öğeleri eklemek, mevcut dosyanın içeriğini okumak veya diğer gelişmiş görevleri gerçekleştirmek için yetkilendirme modunu tanımlamanız ve uygun şekilde ele almanız gerekir.
Aşağıdaki örnekte, yetkilendirme moduna göre işlemini değiştiren gelişmiş bir onOpen()
işlevi gösterilmektedir:
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();
}
Eklentilerin, AuthMode.LIMITED
içinde yürütülürken kenar çubuklarını veya iletişim kutularını açamayacağını unutmayın. Menü öğelerini kullanarak kenar çubuklarını ve iletişim kutularını açabilirsiniz. Bu öğeler AuthMode.FULL
içinde çalışır.
Kullanıcı, Düzenleyici eklentisini çalıştırdığında
Kullanıcı bir Uzantılar menü öğesini tıkladığında Apps Komut Dosyası önce kullanıcının eklentiyi yükleyip yüklemediğini kontrol eder ve yüklemediyse yüklemesini ister. Kullanıcı eklentiyi yetkilendirdiyse komut dosyası, AuthMode.FULL
içindeki menü öğesine karşılık gelen işlevi çalıştırır. Eklenti, dokümanda, formda, sunuda veya e-tabloda etkinleştirilir.
Eklenti menülerinin oluşturulmaması sorununu giderme
Kodunuz yetkilendirme modlarını doğru şekilde yönetmiyorsa eklenti menünüz oluşturulmayabilir. Örneğin:
Bir eklenti, mevcut yetkilendirme modu tarafından desteklenmeyen bir Apps Komut Dosyası hizmeti çalıştırmaya çalışıyor.
Bir eklenti, kullanıcı etkileşimde bulunmadan önce bir hizmet çağrısı çalıştırmaya çalışıyor.
AuthMode.NONE
'da izin hatalarına neden olan bir servis çağrısını kaldırmak veya yeniden düzenlemek için aşağıdaki işlemleri deneyin:
- Eklentinizin Apps Komut Dosyası projesini açın ve
onOpen()
işlevini bulun. - Apps Komut Dosyası hizmetlerinden veya bunlarla ilişkili nesnelerden (ör.
PropertiesService
,SpreadsheetApp
veyaGmailApp
) bahsedenonOpen()
işlevini arayın. - Bir hizmet, kullanıcı arayüzü öğeleri oluşturmak dışında bir amaçla kullanılıyorsa hizmeti kaldırın veya yorum bloğuna sarın.
Yalnızca şu yöntemleri bırakın:
.getUi()
,.createMenu()
,.addItem()
ve.addToUi()
. Ayrıca, bir işlevin dışında kalan hizmetleri bulup kaldırın. - Özellikle oluşturdukları bilgileri kullanan, önceki adımda yorum eklenen veya kaldırılan kod satırlarını içerebilecek işlevleri belirleyin ve hizmet çağrılarını, ihtiyaç duyulan işlevlere taşıyın. Kod tabanınızı, önceki adımlarda yapılan değişikliklere uyacak şekilde yeniden düzenleyin veya yeniden yazın.
Kodu kaydedin ve bir test dağıtımı oluşturun.
Test dağıtımı oluşturduğunuzda Yapılandırma alanının Mevcut kullanıcı için yüklendi olarak ayarlandığından ve Yapılandırma kutusunun altındaki metinde
AuthMode.None
Test dağıtımını başlatın ve Uzantılar menüsünü açın.
Tüm menü öğeleri gösteriliyorsa sorun düzeltilmiştir. Yalnızca Yardım menüsünü görüyorsanız 1. adıma geri dönün. Servis çağrısını kaçırmış olabilirsiniz.