Что такое разрешения и зачем они нужны в Google Apps Script
В Google Apps Script, разрешения – это механизм контроля доступа, который определяет, к каким данным и сервисам Google ваш скрипт может получить доступ. Они играют критически важную роль в безопасности, предотвращая несанкционированный доступ к личной информации и корпоративным ресурсам.
Когда вы запускаете скрипт, который требует доступ к данным (например, чтение содержимого Google Sheets или отправка электронных писем), Google Apps Script запрашивает у вас разрешение на выполнение этих действий. Вы, как пользователь, можете разрешить или отклонить запрос. Без соответствующих разрешений скрипт не сможет выполнить требуемые операции.
Обзор различных типов разрешений
Разрешения в Google Apps Script гранулированы и специфичны для каждого сервиса Google. Примеры:
https://www.googleapis.com/auth/spreadsheets – доступ к Google Sheets.
https://www.googleapis.com/auth/documents – доступ к Google Docs.
https://www.googleapis.com/auth/drive.readonly – доступ только для чтения к Google Drive.
https://www.googleapis.com/auth/gmail.send – разрешение на отправку электронных писем.
Каждое разрешение представлено URL, идентифицирующим область его действия. Важно понимать, какие разрешения необходимы вашему скрипту, чтобы запрашивать только те, которые действительно нужны.
Как Google Apps Script запрашивает разрешения
Первый раз, когда вы запускаете скрипт, которому требуется разрешение, появляется диалоговое окно с запросом доступа. В этом диалоговом окне отображается список разрешений, которые скрипт запрашивает. Пользователь должен нажать кнопку "Разрешить", чтобы предоставить доступ. Если пользователь отклоняет запрос, скрипт не сможет получить доступ к защищенным ресурсам, и выполнение будет прервано.
Типы разрешений Google Apps Script и области их действия
Разрешения для работы с Google Sheets
https://www.googleapis.com/auth/spreadsheets.readonly: Только чтение данных из Google Sheets.
https://www.googleapis.com/auth/spreadsheets: Полный доступ для чтения, записи и редактирования Google Sheets.
/**
* Пример чтения данных из Google Sheet.
* @param {string} spreadsheetId - ID таблицы Google Sheets.
* @return {Array<Array>} - Данные из таблицы.
*/
function readSheetData(spreadsheetId: string): Array<Array> {
const ss = SpreadsheetApp.openById(spreadsheetId);
const sheet = ss.getActiveSheet();
const range = sheet.getDataRange();
const values = range.getValues();
return values;
}Разрешения для работы с Google Docs
https://www.googleapis.com/auth/documents.readonly: Только чтение содержимого Google Docs.
https://www.googleapis.com/auth/documents: Полный доступ для чтения, записи и редактирования Google Docs.
Разрешения для работы с Google Drive
https://www.googleapis.com/auth/drive.readonly: Только чтение метаданных файлов и папок на Google Drive.
https://www.googleapis.com/auth/drive.file: Доступ только к файлам, открытым или созданным скриптом.
https://www.googleapis.com/auth/drive: Полный доступ ко всем файлам и папкам на Google Drive. Использовать с осторожностью!
Разрешения для отправки электронных писем (Gmail)
https://www.googleapis.com/auth/gmail.send: Разрешение на отправку электронных писем от имени пользователя.
https://www.googleapis.com/auth/gmail.readonly: Только чтение метаданных (заголовков) Gmail. Использовать крайне редко.
/**
* Пример отправки email.
* @param {string} recipient - Email получателя.
* @param {string} subject - Тема письма.
* @param {string} body - Тело письма.
* @return {void}
*/
function sendEmail(recipient: string, subject: string, body: string): void {
GmailApp.sendEmail(recipient, subject, body);
}Как просмотреть и отозвать разрешения для Google Apps Script
Просмотр активных разрешений скрипта
Вы можете просмотреть разрешения, предоставленные скрипту, через панель управления Google Account:
Перейдите в Настройки аккаунта Google.
Выберите "Безопасность".
Найдите раздел "Сторонние приложения с доступом к аккаунту".
Выберите приложение (скрипт), для которого хотите просмотреть разрешения.
Отзыв разрешений, предоставленных скрипту
На той же странице, где вы просматриваете разрешения, вы можете нажать кнопку "Удалить доступ", чтобы отозвать все разрешения, предоставленные скрипту.
Последствия отзыва разрешений
После отзыва разрешений скрипт больше не сможет получить доступ к соответствующим данным и сервисам. При попытке выполнения операций, требующих отозванных разрешений, скрипт выдаст ошибку.
Решение проблем с запросами разрешений
Сообщение об ошибке «Требуется разрешение»
Эта ошибка означает, что скрипту необходимо разрешение для выполнения определенной операции, но оно еще не было предоставлено. Убедитесь, что вы предоставили скрипту все необходимые разрешения.
Как понять, какое разрешение необходимо скрипту
Проанализируйте код скрипта. Обратите внимание на использование таких сервисов, как SpreadsheetApp, DocumentApp, DriveApp и GmailApp. Каждый из этих сервисов требует определенных разрешений. В документации Google Apps Script для каждого сервиса указаны необходимые разрешения.
Оптимизация скрипта для минимизации необходимых разрешений
Старайтесь писать код, который требует минимальное количество разрешений. Например, если скрипту нужно только читать данные из Google Sheets, запрашивайте разрешение https://www.googleapis.com/auth/spreadsheets.readonly вместо полного доступа https://www.googleapis.com/auth/spreadsheets.
Лучшие практики при работе с разрешениями Google Apps Script
Запрашивайте только необходимые разрешения
Это самая важная практика. Избегайте запроса избыточных разрешений. Меньше разрешений = меньше риск для безопасности.
Понимание влияния разрешений на безопасность
Полный доступ к Google Drive (https://www.googleapis.com/auth/drive) дает скрипту возможность просматривать, редактировать и удалять все файлы на вашем Google Drive. Предоставляйте такие разрешения только скриптам, которым вы полностью доверяете.
Информирование пользователей о запрашиваемых разрешениях
Если вы разрабатываете скрипт для других пользователей, объясните им, зачем скрипту нужны те или иные разрешения. Это поможет пользователям принимать обоснованные решения о предоставлении доступа.