API Google Drive поддерживает несколько способов предотвращения изменения файлов, включая ограничение содержимого файлов и запрет на загрузку, печать или копирование файлов.
Настройте файлы так, чтобы они были доступны только для чтения, с помощью ограничений на содержимое Google Диска.
Вы можете добавить ограничение на содержимое файла в Google Диске, чтобы запретить пользователям выполнять следующие действия:
- Изменение заголовка
- Внесение изменений в контент
- Загрузка исправленной версии
- Добавление или изменение комментариев
Ограничение на содержимое не является ограничением на доступ. Хотя пользователи не могут изменять содержимое файла, другие операции по-прежнему разрешены в зависимости от их уровня доступа. Например, пользователь с правами на редактирование может перемещать элемент или изменять его параметры доступа.
Чтобы добавить или удалить ограничение на содержимое файла в Google Диск, пользователь должен обладать соответствующими permissions . Для файла или папки в разделе «Мой Диск» или на общем диске с ограничением содержимого capabilities.canModifyEditorContentRestriction необходимо назначить role=writer . Для файла или папки в разделе «Мой Диск» или на общем диске с ограничением содержимого ownerRestricted необходимо быть владельцем файла или иметь role=organizer . Чтобы просмотреть элемент с ограничением содержимого, пользователи должны иметь role=reader или выше. Полный список ролей см. в разделе «Роли и разрешения» . Чтобы обновить разрешения для файла, см. раздел «Обновление разрешений» .
Для установки ограничения на содержимое можно использовать логическое поле contentRestrictions.readOnly в ресурсе files . Обратите внимание, что установка ограничения на содержимое для элемента перезаписывает существующее.
Сценарии ограничений на контент
Ограничение на содержимое элемента Google Диска сигнализирует пользователям о том, что его содержимое не следует изменять. Это может быть вызвано одной из следующих причин:
- Приостановка работы над совместным документом на период проверки или аудита.
- Перевод элемента в завершенное состояние, например, «одобрено».
- Предотвращение изменений во время деликатной встречи.
- Запрет на внесение внешних изменений в рабочие процессы, обрабатываемые автоматизированными системами.
- Ограничение редактирования с помощью надстроек Google Apps Script и Google Workspace.
- Как избежать случайных правок в документе.
Следует отметить, что хотя ограничения на контент могут помочь в управлении контентом, они не предназначены для того, чтобы помешать пользователям с достаточными правами продолжать работу с элементом. Кроме того, это не способ создания неизменяемой записи. Ограничения на контент в Google Диска являются изменяемыми, поэтому ограничение на контент элемента не гарантирует, что элемент никогда не изменится.
Управление файлами с ограничениями по содержимому.
В документах Google Docs, Google Sheets и Google Slides, а также во всех других файлах, могут содержаться ограничения на доступ к содержимому.
Ограничение на содержание элемента препятствует внесению изменений в его заголовок и содержимое, в том числе:
- Комментарии и предложения (по документам, таблицам, презентациям и бинарным файлам)
- Изменения в бинарном файле
- Текст и форматирование в документах.
- Текст или формулы в таблицах, макет таблицы и экземпляры таблиц.
- Весь контент в слайдах, а также порядок и нумерация слайдов.
Некоторые типы файлов не могут содержать ограничений по содержимому. Вот несколько примеров:
- Google Формы
- Сайты Google
- Рисунки Google
- Ярлыки и ярлыки сторонних разработчиков. Для получения дополнительной информации см. разделы «Создание файла ярлыка для содержимого, хранящегося в вашем приложении» и «Создание ярлыка для файла в Google Диске» .
Добавить ограничение на контент
Чтобы добавить ограничение на содержимое файла, используйте метод files.update , установив для поля contentRestrictions.readOnly значение true . Добавьте необязательную reason добавления ограничения, например, «Завершение контракта». Следующий пример кода показывает, как добавить ограничение на содержимое:
Java
File updatedFile =
new File()
.setContentRestrictions(
ImmutableList.of(new ContentRestriction().setReadOnly(true).setReason("Finalized contract."));
File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();
Python
content_restriction = {'readOnly': True, 'reason':'Finalized contract.'}
response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();
Node.js
/**
* Set a content restriction on a file.
* @return{obj} updated file
**/
async function addContentRestriction() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
const contentRestriction = {
'readOnly': True,
'reason': 'Finalized contract.',
};
const updatedFile = {
'contentRestrictions': [contentRestriction],
};
try {
const response = await service.files.update({
fileId: 'FILE_ID',
resource: updatedFile,
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
Замените FILE_ID на fileId файла, который вы хотите изменить.
При запуске примера кода содержимое файла будет ограничено, и рядом с именем файла в пользовательском интерфейсе Google Drive появится символ замка ( ). Теперь файл доступен только для чтения.
Снять ограничение на контент
Чтобы снять ограничение на содержимое файла, используйте метод files.update , установив для поля contentRestrictions.readOnly значение false . Следующий пример кода показывает, как снять ограничение на содержимое:
Java
File updatedFile =
new File()
.setContentRestrictions(
ImmutableList.of(new ContentRestriction().setReadOnly(false));
File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();
Python
content_restriction = {'readOnly': False}
response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();
Node.js
/**
* Remove a content restriction on a file.
* @return{obj} updated file
**/
async function removeContentRestriction() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
const contentRestriction = {
'readOnly': False,
};
const updatedFile = {
'contentRestrictions': [contentRestriction],
};
try {
const response = await service.files.update({
fileId: 'FILE_ID',
resource: updatedFile,
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
Замените FILE_ID на fileId файла, который вы хотите изменить.
При запуске примера кода ограничения на содержимое файла снимаются.
Вы также можете использовать пользовательский интерфейс Google Диска, чтобы снять ограничение на доступ к контенту и разрешить его редактирование (при условии наличия необходимых прав). Для этого есть два варианта:
В Google Диске щелкните правой кнопкой мыши файл с ограничением по содержимому и выберите «Разблокировать .
Рисунок 2. Снятие ограничения на содержимое файла в списке файлов Google Диска. Откройте файл с ограничением по содержимому и нажмите (в заблокированном режиме) > Разблокировать файл .
Рисунок 3. Снятие ограничения на содержимое файла в документе.
Проверьте наличие ограничений на контент.
Для проверки наличия ограничений на контент используйте метод files.get с возвращаемым полем contentRestrictions . Следующий пример кода показывает, как проверить статус ограничения на контент:
Java
File response = driveService.files().get("FILE_ID").setFields("contentRestrictions").execute();
Python
response = drive_service.files().get(fileId="FILE_ID", fields = "contentRestrictions").execute();
Node.js
/**
* Get content restrictions on a file.
* @return{obj} updated file
**/
async function fetchContentRestrictions() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
try {
const response = await service.files.get({
fileId: 'FILE_ID',
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
Замените FILE_ID на fileId файла, который вы хотите проверить.
При запуске примера кода метод возвращает ресурс ContentRestriction , если он присутствует.
Добавьте ограничение на содержимое, которое может изменять только владелец файла.
Чтобы добавить ограничение на содержимое файла, позволяющее переключать этот механизм только его владельцам, используйте метод files.update с логическим полем contentRestrictions.ownerRestricted , установленным в true . Следующий пример кода показывает, как добавить ограничение на содержимое только для владельцев файлов:
Java
File updatedFile =
new File()
.setContentRestrictions(
ImmutableList.of(new ContentRestriction().setReadOnly(true).setOwnerRestricted(true).setReason("Finalized contract."));
File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();
Python
content_restriction = {'readOnly': True, 'ownerRestricted': True, 'reason':'Finalized contract.'}
response = drive_service.files().update(fileId="FILE_ID", body = {'contentRestrictions' : [content_restriction]}, fields = "contentRestrictions").execute();
Node.js
/**
* Set an owner restricted content restriction on a file.
* @return{obj} updated file
**/
async function addOwnerRestrictedContentRestriction() {
// Get credentials and build service
// TODO (developer) - Use appropriate auth mechanism for your app
const {GoogleAuth} = require('google-auth-library');
const {google} = require('googleapis');
const auth = new GoogleAuth({scopes: 'https://www.googleapis.com/auth/drive'});
const service = google.drive({version: 'v3', auth});
const contentRestriction = {
'readOnly': True,
'ownerRestricted': True,
'reason': 'Finalized contract.',
};
const updatedFile = {
'contentRestrictions': [contentRestriction],
};
try {
const response = await service.files.update({
fileId: 'FILE_ID',
resource: updatedFile,
fields: 'contentRestrictions',
});
return response;
} catch (err) {
// TODO (developer) - Handle error
throw err;
}
}
Замените FILE_ID на fileId файла, который вы хотите изменить.
При запуске примера кода доступ к файлу ограничен по содержимому, и удалить его могут только владельцы файла. Если вы являетесь владельцем файла, рядом с именем файла в пользовательском интерфейсе Google Диска появится активный символ блокировки ( ). Если вы не являетесь владельцем, символ блокировки будет неактивным.
Чтобы снять флаг ownerRestricted , используйте метод files.update , установив для поля contentRestrictions.ownerRestricted false .
возможности ограничения контента
Ресурс files содержит набор логических полей capabilities , используемых для указания того, можно ли выполнить какое-либо действие с файлом.
Ограничения на контент включают в себя следующие capabilities :
-
capabilities.canModifyEditorContentRestriction: Позволяет ли текущий пользователь добавлять или изменять ограничения на контент . -
capabilities.canModifyOwnerContentRestriction: Позволяет ли текущий пользователь добавлять или изменять ограничения на контент, установленные владельцем . -
capabilities.canRemoveContentRestriction: Позволяет ли текущий пользователь снять примененное ограничение на контент (если оно присутствует).
Для получения более подробной информации см. раздел «Понимание возможностей файлов» .
Пример получения информации о capabilities файла см. в разделе «Получение возможностей файла» .
Запретите пользователям скачивать, распечатывать или копировать ваш файл.
Вы можете ограничить возможности пользователей по загрузке, печати и копированию файлов в Google Диске, Документах, Таблицах и Презентациях.
Чтобы определить, может ли пользователь изменять ограничения на загрузку файла, установленные владельцем или организатором, проверьте логическое поле capabilities.canChangeItemDownloadRestriction . Если capabilities.canChangeItemDownloadRestriction установлено в true , к файлу могут быть применены ограничения на загрузку. Для получения дополнительной информации см. раздел «Понимание возможностей файла» .
Чтобы применить ограничения на загрузку файла, установите поле downloadRestrictions с помощью метода files.update . Вы также можете установить это поле, используя объект DownloadRestrictionsMetadata .
Объект DownloadRestrictionsMetadata имеет два поля: itemDownloadRestriction и effectiveDownloadRestrictionWithContext . Оба поля доступны для чтения, но установить значение можно только для поля itemDownloadRestriction . Поле itemDownloadRestriction возвращает объект DownloadRestriction . Объект DownloadRestriction имеет два отдельных логических поля: restrictedForReaders и restrictedForWriters .
При установке поля itemDownloadRestriction ограничение на скачивание файла применяется непосредственно владельцем или организатором. Оно не учитывает настройки общего диска или правила предотвращения потери данных (DLP). Для получения дополнительной информации см. раздел «О DLP» .
Если вы обновите поле itemDownloadRestriction , установив для поля restrictedForWriters значение true , это означает, что restrictedForReaders также будет иметь значение true . Аналогично, установка restrictedForWriters в true и restrictedForReaders в false эквивалентна установке restrictedForWriters и restrictedForReaders в true .
Для поля effectiveDownloadRestrictionWithContext применяется ограничение на загрузку файла, учитывающее все настройки ограничений и правила DLP.
Поле effectiveDownloadRestrictionWithContext может принимать значения restrictedForWriters или restrictedForReaders . Если для соответствующих ролей существуют какие-либо ограничения на загрузку или копирование из настроек файлов, настроек общих дисков или правил DLP (включая те, которые содержат контекст), то значение устанавливается равным true , в противном случае — false .
Обратная совместимость
Мы рекомендуем использовать объект DownloadRestriction для регулирования способов загрузки, печати и копирования файлов пользователями.
Если вы хотите использовать логическое поле copyRequiresWriterPermission , то функциональность будет отличаться как для чтения из этого поля, так и для записи в него.
Полученное значение поля copyRequiresWriterPermission показывает, могут ли пользователи с правами role=commenter или role=reader загружать, печатать или копировать файлы в Google Диск. Значение поля отражает комбинацию настроек файлов, настроек общего доступа к дискам или правил защиты от утечки данных (DLP). Однако контекстная оценка для правил DLP не включена.
Установка значения false в поле copyRequiresWriterPermission обновляет значения false как в поле restrictedForWriters , так и в поле restrictedForReaders . Это означает, что ограничения на скачивание или копирование снимаются для всех пользователей.
Поля, управляющие функциями загрузки, печати и копирования.
В следующей таблице перечислены поля files ресурсов, влияющие на функциональность загрузки, печати и копирования:
| Поле | Описание | Версия |
|---|---|---|
capabilities.canCopy | Умеет ли текущий пользователь копировать файл. | v2 и v3 |
capabilities.canDownload | Возможность загрузки файла для текущего пользователя. | v2 и v3 |
capabilities.canChangeCopyRequiresWriterPermission | Может ли текущий пользователь изменить ограничение copyRequiresWriterPermission для файла? | v2 и v3 |
capabilities.canChangeItemDownloadRestriction | Может ли текущий пользователь изменить ограничение на скачивание файла? | только v3 |
copyRequiresWriterPermission | Следует ли отключить для читателей и комментаторов возможность копирования, печати или загрузки этого файла? | v2 и v3 |
downloadRestrictions | Ограничения на скачивание, применяемые к файлу. | только v3 |