مجوز برای بسیاری از برنامههای مبتنی بر اسکریپت برنامهها ساده است، زیرا پروژه اسکریپت وقتی کسی سعی میکند از آن استفاده کند، مجوزهای لازم را درخواست میکند.
مدل مجوز برای افزودنی های ویرایشگر به چند دلیل پیچیده تر است:
وقتی کاربر فایلی را ایجاد میکند، همه افزونههایی که کاربر نصب میکند در منوی افزونهها فهرست میشوند، حتی اگر کاربر هنوز آن افزونهها را مجاز نکرده باشد.
این افزونهها روی فایلهایی در Google Drive کار میکنند که میتوانند با همکاران به اشتراک گذاشته شوند. همکارانی که افزونه ویرایشگر را نصب نکردهاند، آن را در اسنادی میبینند که سازنده فایل از آن استفاده کرده است.
وقتی یک سند باز می شود، افزودنی های ویرایشگر به طور خودکار توابع
onOpen()
خود را اجرا می کنند.
برای محافظت از دادههای کاربر، حالتهای مجوز اعمال میشود که برخی از سرویسها را برای onOpen()
از دسترس خارج میکند. این راهنما می تواند به شما کمک کند تا بفهمید کد شما چه کاری و چه زمانی می تواند انجام دهد.
مدل مجوز
حالت مجوز یک افزونه ویرایشگر به وضعیت آن بستگی دارد، که بستگی به این دارد که چه کسی از آن استفاده می کند: کاربری که افزونه را نصب کرده است یا یک همکار.
حالت های افزودنی ویرایشگر
افزونه های ویرایشگر در منوی افزونه ها نصب، فعال یا هر دو هستند.
- پس از اینکه کاربر یا سرپرست وی آن را از Google Workspace Marketplace دریافت کرده و به آن اجازه دسترسی به داده های Google خود را می دهد، برای کاربر خاصی نصب می شود.
- وقتی کسی از آن استفاده میکند، در یک سند، فرم، ارائه یا صفحهگسترده، یک افزونه فعال میشود.
- هنگامی که افراد روی یک فایل همکاری می کنند و یکی از آنها از یک افزونه استفاده می کند، برای یک کاربر نصب می شود و برای فایل فعال می شود .
جدول زیر تفاوت بین نصب شده و فعال را خلاصه می کند. توجه داشته باشید که وقتی یک اسکریپت را بهعنوان یک افزونه آزمایش میکنید، میتوانید آزمایش را در هر یک یا هر دو حالت اجرا کنید.
نصب شده است | فعال شد | |
---|---|---|
اعمال می شود | کاربر | سند، فرم، ارائه یا صفحه گسترده |
ناشی از | دریافت افزونه از فروشگاه | دریافت افزونه از فروشگاه هنگام استفاده از آن سند، فرم، ارائه یا صفحه گسترده یا استفاده از افزونه ای که قبلاً در آن سند، فرم، ارائه یا صفحه گسترده نصب شده است |
منو قابل مشاهده برای | فقط آن کاربر در تمام اسناد، فرمها، ارائهها یا صفحهگستردههایی که باز یا ایجاد میکنند | همه همکاران در آن سند، فرم، ارائه یا صفحه گسترده |
حالت مجوز برای onOpen() | AuthMode.NONE (مگر اینکه فعال باشد، در این صورت AuthMode.LIMITED) | AuthMode.LIMITED |
حالت های مجوز
وقتی کاربر یک سند، فرم، ارائه یا صفحه گسترده را باز می کند، تابع onOpen()
یک افزونه ویرایشگر به طور خودکار اجرا می شود. برای محافظت از دادههای کاربران، Apps Script کاری را که تابع onOpen()
میتواند انجام دهد، محدود میکند. حالت افزودنی ویرایشگر تعیین میکند که تابع onOpen()
در کدام حالت مجوز اجرا شود.
اگر افزونه ویرایشگر در فایل، فرم، ارائه یا صفحه گسترده فعال باشد، onOpen()
در AuthMode.LIMITED
اجرا می شود. اگر افزونه فعال نباشد و فقط نصب شده باشد، onOpen()
در AuthMode.NONE
اجرا می شود.
در AuthMode.NONE
، یک افزونه نمیتواند خدمات خاصی را اجرا کند تا زمانی که کاربر با کلیک کردن یا اجرای توابع سفارشی با افزونه تعامل داشته باشد. اگر افزونه شما سعی کند از این سرویس ها در onOpen()
، onInstall()
یا دامنه جهانی استفاده کند، مجوزها از کار می افتد و سایر تماس ها، مانند پر کردن منوها، متوقف می شوند . راهنما تنها گزینه پشتیبانی شده است.
برای اجرای تماس های سرویس محدود، باید از حالت مجوز AuthMode.FULL
استفاده کنید. عملکردهای تعامل کاربر، مانند کلیک کردن روی گزینه منو، فقط در این حالت اجرا می شود. پس از اجرای کد در حالت AuthMode.FULL
، افزونه می تواند از تمام محدوده هایی که کاربر مجاز کرده است استفاده کند.
Apps Script حالت مجوز را به عنوان ویژگی authMode
پارامتر رویداد Apps Script، e
; مقدار e.authMode
مربوط به یک ثابت در فهرست Apps Script ScriptApp.AuthMode
است.
حالتهای مجوز برای همه روشهای اجرای Apps Script اعمال میشود، از جمله اجرا از ویرایشگر اسکریپت، از یک آیتم منو، یا از تماس google.script.run
Apps Script. با این حال، ویژگی e.authMode
فقط در صورتی قابل بررسی است که اسکریپت در نتیجه یک تریگر مانند onOpen()
، onEdit()
یا onInstall()
اجرا شود. توابع سفارشی در کاربرگنگار Google از حالت مجوز خود استفاده میکنند، AuthMode.CUSTOM_FUNCTION
، که مشابه LIMITED
است اما محدودیتهای کمی متفاوت دارد. برای همه موارد دیگر، اسکریپت ها در AuthMode.FULL
اجرا می شوند، همانطور که در جدول زیر توضیح داده شده است.
NONE | LIMITED | CUSTOM_FUNCTION | FULL | |
---|---|---|---|---|
رخ می دهد برای | onOpen() (اگر کاربر افزونه ای را نصب کرده باشد اما آن را در سند، فرم، ارائه یا صفحه گسترده فعال نکرده باشد) | onOpen() (همه زمانهای دیگر)onEdit() (فقط در Sheets) | توابع سفارشی | همه زمان های دیگر، از جمله: ماشه های قابل نصب onInstall() google.script.run |
دسترسی به داده های کاربر | فقط محلی | فقط محلی | فقط محلی | بله |
دسترسی به سند، فرم، ارائه یا صفحه گسترده | خیر | بله | بله - فقط خواندنی | بله |
دسترسی به رابط کاربری | افزودن آیتم های منو | افزودن آیتم های منو | خیر | بله |
دسترسی به Properties | خیر | بله | بله | بله |
دسترسی به Jdbc ، UrlFetch | خیر | خیر | بله | بله |
سایر خدمات | Logger Utilities | هر سرویسی که به داده های کاربر دسترسی ندارد | هر سرویسی که به داده های کاربر دسترسی ندارد | کلیه خدمات |
چرخه عمر مجوز یک افزونه ویرایشگر
هنگامی که یک افزونه برای کاربر فعلی نصب می شود یا در فایل فعلی فعال می شود، با باز شدن آن فایل، برافزا برای سند، فرم، ارائه یا صفحه گسترده بارگیری می شود. این افزونه در منوی Extensions فهرست شده است و شروع به گوش دادن به محرک های ساده onInstall()
، onOpen()
و onEdit()
می کند. اگر کاربر روی آیتم منوی Extensions کلیک کند، اجرا می شود .
افزونه ویرایشگر نصب شده است
هنگامی که یک افزونه ویرایشگر از فروشگاه نصب می شود، تابع onInstall()
آن در AuthMode.FULL
اجرا می شود. در این حالت مجوز، افزونه میتواند یک روال تنظیم پیچیده را اجرا کند. همچنین باید از onInstall()
برای ایجاد آیتم های منو استفاده کنید، زیرا سند، فرم، ارائه یا صفحه گسترده از قبل باز است و تابع onOpen()
شما اجرا نشده است. نمونه زیر نحوه فراخوانی تابع onOpen()
از تابع onInstall()
را نشان می دهد:
function onInstall(e) {
onOpen(e);
// Perform additional setup as needed.
}
افزونه ویرایشگر باز می شود
هنگامی که یک سند، فرم، ارائه یا صفحه گسترده باز می شود، هر افزونه ویرایشگر را که کاربر فعلی نصب کرده یا هر همکار در فایل فعال کرده است، بارگیری می کند و هر یک از توابع onOpen()
آنها را فراخوانی می کند. حالت مجوزی که onOpen()
در آن اجرا می شود به نصب یا فعال بودن یک افزونه بستگی دارد.
اگر یک افزونه فقط یک منوی اصلی ایجاد کند، حالت مهم نیست. نمونه زیر یک تابع اصلی onOpen()
را نشان می دهد:
function onOpen(e) {
SpreadsheetApp.getUi().createAddonMenu() // Or DocumentApp.
.addItem('Insert chart', 'insertChart')
.addItem('Update charts', 'updateCharts')
.addToUi();
}
برای افزودن آیتمهای منوی پویا بر اساس ویژگیهای Apps Script ذخیرهشده، برای خواندن محتویات فایل جاری، یا انجام سایر کارهای پیشرفته، باید حالت مجوز را شناسایی کرده و آن را به طور مناسب مدیریت کنید.
نمونه زیر یک onOpen()
پیشرفته را نشان می دهد که عملکرد خود را بر اساس حالت مجوز تغییر می دهد:
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();
}
توجه داشته باشید که افزونهها نمیتوانند هنگام اجرا در AuthMode.LIMITED
، نوارهای کناری یا دیالوگها را باز کنند. میتوانید از آیتمهای منو برای باز کردن نوارهای کناری و دیالوگها استفاده کنید زیرا در AuthMode.FULL
اجرا میشوند .
کاربر افزونه ویرایشگر را اجرا می کند
وقتی کاربر روی آیتم منوی Extensions کلیک میکند، Apps Script ابتدا بررسی میکند که آیا کاربر افزونه را نصب کرده است یا خیر، و در غیر این صورت از او میخواهد این کار را انجام دهد. اگر کاربر افزونه را مجاز کرده باشد، اسکریپت تابعی را اجرا می کند که با آیتم منو در AuthMode.FULL
مطابقت دارد. این افزونه در سند، فرم، ارائه یا صفحهگسترده در صورتی که قبلاً فعال نشده بود، فعال میشود.
عیبیابی رندر نشدن منوهای افزودنی
اگر کد شما حالتهای مجوز را به درستی مدیریت نکند، ممکن است منوی افزودنی شما نمایش داده نشود. به عنوان مثال:
یک افزونه سعی می کند یک سرویس Apps Script را اجرا کند که توسط حالت مجوز فعلی پشتیبانی نمی شود.
یک افزونه سعی می کند یک تماس سرویس را قبل از تعامل کاربر با آن اجرا کند.
برای حذف یا تنظیم مجدد یک تماس سرویس که باعث ایجاد خطاهای مجوز در AuthMode.NONE
می شود، اقدامات زیر را امتحان کنید:
- پروژه Apps Script را برای افزونه خود باز کنید و تابع
onOpen()
را پیدا کنید. - تابع
onOpen()
برای ذکر خدمات Apps Script یا اشیاء مرتبط با آنها، مانندPropertiesService
،SpreadsheetApp
یاGmailApp
جستجو کنید. - اگر سرویسی برای چیزی غیر از ایجاد عناصر رابط کاربری استفاده می شود، آن را حذف کنید یا در یک بلوک نظر قرار دهید. فقط این متدها را بگذارید:
.getUi()
.createMenu()
،.addItem()
و.addToUi()
. همچنین هر سرویسی را که خارج از یک تابع است پیدا و حذف کنید. - توابعی را که می توانند حاوی خطوط کدی هستند که در مرحله قبل توضیح داده شده یا حذف شده اند، شناسایی کنید، به ویژه آنهایی که از اطلاعاتی که تولید می کنند استفاده می کنند، و فراخوانی های سرویس را به توابعی که به آنها نیاز دارند منتقل کنید. برای تطبیق با تغییرات ایجاد شده در مراحل قبلی، پایگاه کد خود را مجدداً مرتب یا بازنویسی کنید.
کد را ذخیره کنید و یک استقرار آزمایشی ایجاد کنید.
هنگامی که یک پیادهسازی آزمایشی ایجاد میکنید، مطمئن شوید که فیلد Config برای کاربر فعلی نصب شده است و متن زیر کادر Config میگوید Test in
AuthMode.None
استقرار آزمایشی را اجرا کنید و منوی Extensions را باز کنید.
اگر همه آیتم های منو نمایش داده شوند، مشکل برطرف شده است. اگر فقط منوی راهنما را می بینید، به مرحله 1 برگردید. ممکن است تماس سرویس را از دست داده باشید.