Düzenleyici eklentisi yetkilendirmesi

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:

  1. Eklentinizin Apps Komut Dosyası projesini açın ve onOpen() işlevini bulun.
  2. Apps Komut Dosyası hizmetlerinden veya bunlarla ilişkili nesnelerden (ör. PropertiesService, SpreadsheetApp veya GmailApp) bahseden onOpen() işlevini arayın.
  3. 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.
  4. Ö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.
  5. 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

  6. Test dağıtımını başlatın ve Uzantılar menüsünü açın.

  7. 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.