Düzenleyici eklentisi yetkilendirmesi

Komut dosyası projesi, kullanıcılar uygulamayı kullanmaya çalıştığında ihtiyaç duyduğu eksik izinleri istediği için Apps Script tabanlı birçok uygulamanın yetkilendirmesi kolaydır.

Yetkilendirme modeli Düzenleyici Eklentileri çeşitli nedenlerle daha karmaşıktır:

  • Kullanıcı bir dosya oluşturduğunda, kullanıcının yüklediği tüm eklentiler Uzantılar menüsünde listeleniyor veya (kullanıcı bu eklentileri henüz yetkilendirmediyse).

  • Bu eklentiler şu dosyalarda çalışır: Ortak çalışanlarla paylaşılabilen Google Drive. Ortak çalışmayanlar Dokümanlarda görmek için Düzenleyici eklentisini yüklemeniz gerekir. dosyayı oluşturan kişi tarafından kullanılan dosya.

  • Düzenleyici eklentileri, bir doküman açıldığında işlevlerini otomatik olarak çalıştırır.

Kullanıcı verilerini korumak için, bazı hizmetlerin onOpen() tarafından kullanılamamasını sağlayan yetkilendirme modları uygulanır. Bu kılavuz, kodunuzun ne olduğunu anlamanıza yardımcı olabilir. ne zaman yapılacağını öğreneceğiz.

Yetkilendirme modeli

Düzenleyici eklentilerinin yetkilendirme modu durumu (eklentiyi yükleyen kullanıcıya) bağlıdır. ortak çalışma yapabilirsiniz.

Düzenleyici Eklenti durumları

Uzantılar menüsündeki Düzenleyici Eklentileri yüklü, etkin veya her ikisi olmalıdır.

  • Belirli bir kullanıcı için eklenti yüklü veya yöneticileri, Google Workspace Marketplace'e giriş yaparak Google verilerine erişmesi için yetkilendirebilirsiniz.
  • Eklenti doküman, form ve formda etkinleştirilir sunu veya elektronik tablolara dönüştürülebilir.
  • Kullanıcılar bir dosyada ortak çalışırken bunlardan biri eklenti kullandığında eklenti, ilgili kullanıcı için yüklenir ve dosya için etkinleştirilir.

Aşağıdaki tabloda yüklü ve etkin arasındaki farklar özetlenmiştir. Bir komut dosyasını eklenti olarak test ettiğinizde testi bu iki durumdan 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 alma Söz konusu dokümanı, formu, sunuyu veya e-tabloyu kullanırken mağazadan eklenti edinme veya
Daha önce yüklenen bir eklentiyi söz konusu dokümanda, formda, sunu
Menü şunlara görünür: Yalnızca ilgili 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 (aynı zamanda etkinleştirilmemişse AuthMode.LIMITED)
AuthMode.LIMITED

Yetkilendirme modları

Düzenleyici eklentisinin onOpen() işlevi, kullanıcı bir doküman, form, sunu veya e-tablo açtığında otomatik olarak çalışır. Kullanıcıların güvenliğini korumak için Apps Komut Dosyası, onOpen() işlevinin yapabileceği işlemler. Düzenleyici eklentisi durumu onOpen() işlevinin hangi yetkilendirme modunda çalışacağını belirler.

Dosya, form, sunu veya e-tabloda bir Düzenleyici eklentisi etkinleştirildiyse onOpen(), AuthMode.LIMITED'te çalışır. Eklenti etkin değilse ve yalnızca yüklenir, onOpen() ise AuthMode.NONE içinde çalışır.

AuthMode.NONE ürününde bir eklenti belirli kullanıcı eklentiyle etkileşime girene kadar özel işlevleri tıklayabilir veya çalıştırabilirsiniz. Eklentiniz bu hizmetleri onOpen(), onInstall() veya genel kapsamda kullanmaya çalışırsa izinler geçersiz olur ve menü doldurma gibi diğer çağrılar durdurulur. Desteklenen tek seçenek Yardım'dır.

Kısıtlanmış hizmet çağrıları ç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 geçer Apps Komut Dosyası'nın authMode özelliği olarak event parametresi, e; şunun değeri: e.authMode, Apps Komut Dosyası'nda bir sabit değere karşılık gelir ScriptApp.AuthMode sıralaması.

Yetkilendirme modları tüm Apps Komut Dosyası yürütme yöntemleri için geçerlidir. komut dosyası düzenleyiciden, menü öğesinden veya Apps Komut Dosyası'ndan çalıştırma dahil. google.script.run araması. Ancak e.authMode özelliği yalnızca komut dosyası onOpen(), onEdit() veya onInstall() gibi bir tetikleyici sonucunda çalıştırılıyorsa denetlenir. Özel işlevler e-Tablolar'da kendi yetkilendirme modunu kullanır: AuthMode.CUSTOM_FUNCTION Bu, LIMITED ile benzer ancak biraz farklı kısıtlamalara sahiptir. Herkes için diğer durumlarda, komut dosyaları aşağıdaki örnekte açıklandığı gibi AuthMode.FULL içinde çalışır: tablosunu oluşturalım.

NONE LIMITED CUSTOM_FUNCTION FULL
Gerçekleşme zamanı onOpen() (kullanıcı bir eklenti yüklediyse ancak dokümanda, formda, sunu veya e-tabloda etkinleştirmediyse) onOpen() (diğer tüm zamanlar)
onEdit() (yalnızca E-Tablolar'da)
Özel işlevler Aşağıdakiler dahil olmak üzere diğer tüm zamanlar:
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ü öğeleri ekleme Menü öğeleri 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 tüm hizmetler Tüm hizmetler

Düzenleyici eklentisinin yetkilendirme yaşam döngüsü

Mevcut kullanıcı için yüklenen veya mevcut dosyada etkinleştirilen eklentiler, ilgili dosya, form, sunu veya e-tablo açıldığında yüklenir. Eklenti, Uzantılar menüsünde listelenir ve basit tetikleyicileri onInstall(), onOpen() ve onEdit() dinlemeye başlar. Kullanıcı bir Uzantılar menüsü öğesini tıklarsa ilgili uzantı çalıştırılır.

Düzenleyici eklentisi yüklendi.

Düzenleyici eklentisi mağazadan yüklendiğinde onInstall() işlevi AuthMode.FULL'te çalışır. Bu yetkilendirme modunda karmaşık bir kurulum rutini çalıştırabilir. Ayrıca menü öğelerini oluşturmak için onInstall() kullanın, çünkü doküman, form, sunu veya e-tablo zaten açıktır ve onOpen() işleviniz çalışmamıştır. Aşağıdaki örnekte, onInstall() işlevinden onOpen() işlevinin 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 veya ortak çalışanın dosyada etkinleştirdiği tüm Düzenleyici eklentileri yüklenir ve bu eklentilerin her birinin onOpen() işlevleri çağrılır. onOpen()'ın ç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();
}

Depolanan Apps Script mülklerine dayalı 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 kullanmanız gerekir.

Aşağıdaki örnekte, işlemini yetkilendirme moduna göre 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 çalışırken kenar çubukları veya iletişim kutuları açamayacağını unutmayın. Yan panelleri ve iletişim kutularını açmak için menü öğelerini kullanabilirsiniz. Bunlar AuthMode.FULL'da çalışır.

Kullanıcı, Düzenleyici Eklentisi'ni çalıştırır

Kullanıcı bir Uzantılar menü öğesini tıkladığında Apps Script öncelikle kullanıcının eklentiyi yükleyip yüklemediğini kontrol eder ve yüklemediyse yüklemesini ister. Kullanıcı eklentiye yetki verdiyse komut dosyası, AuthMode.FULL'teki menü öğesine karşılık gelen işlevi çalıştırır. İlgili içeriği oluşturmak için kullanılan eklentinin doküman, form, bir e-tablo veya sunum oluşturun.

Eklenti menüsünün oluşturulmamasıyla ilgili sorunları giderme

Kodunuz varsa eklenti menünüz oluşturulmayabilir hesabı, yetkilendirme modlarını doğru şekilde yönetmez. Örneğin:

  • Bir eklenti, Apps Komut Dosyası çalıştırmaya çalışıyor ve geçerli yetkilendirme modunda desteklemediğini söylüyor:

  • Bir eklenti, kullanıcı onunla etkileşime geçmeden önce bir hizmet çağrısı çalıştırmaya çalışır.

AuthMode.NONE'te izin hatalarına neden olan bir hizmet ç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çıp onOpen() işlevini bulun.
  2. onOpen() işlevinde Apps Komut Dosyası'ndaki ifadeleri arayın bunlarla ilişkili hizmetler veya nesneler (örneğin, PropertiesService, SpreadsheetApp veya GmailApp.
  3. Bir hizmet, kullanıcı arayüzü öğeleri oluşturmak dışında bir şey için kullanılıyorsa bunu kaldırabilir veya bir yorum blokuna sarmalayabilirsiniz. Yalnızca şu yöntemleri bırakın: .getUi(), .createMenu(), .addItem(), ve .addToUi(). Ayrıca, işlev dışındaki hizmetleri bulup kaldırın.
  4. Yorum yapılan veya kaldırılan kod satırlarını içerebilecek işlevleri tanımlama başta ürettikleri bilgileri kullananlar olmak üzere, bir önceki adımda ve hizmet çağrılarını bunlara ihtiyaç duyan işlevlere taşıyın. Önceki adımlarda yapılan değişikliklere uyum sağlamak için kod tabanınızı yeniden düzenleyin veya yeniden yazın.
  5. Kodu kaydedin ve test dağıtımı oluşturun.

    Test dağıtımı oluştururken Yapılandırma alanının Mevcut kullanıcı için yüklü olduğundan ve Yapılandırma kutusunun altındaki metinde AuthMode.None'de test et ifadesinin bulunduğundan emin olun.

  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. Cevapsız hizmet araması yapmış olabilirsiniz.