API Google Drive поддерживает несколько способов предотвращения изменения файлов, включая ограничение содержимого файлов и запрет на загрузку, печать или копирование файлов.
Сделайте файлы доступными только для чтения с помощью ограничений содержимого Диска
Вы можете добавить ограничение на содержимое файла Google Диска, чтобы запретить пользователям выполнять следующие действия:
- Изменение названия
- Внесение изменений в контент
- Загрузка версии
- Добавление или изменение комментариев
Ограничение по содержанию не является ограничением доступа. Хотя пользователи не могут изменять содержимое файла, другие операции по-прежнему разрешены в зависимости от их уровня доступа. Например, пользователь с правом редактирования может перемещать элемент или изменять настройки общего доступа к нему.
Чтобы добавить или снять ограничение на содержимое файла на Диске, пользователь должен иметь соответствующие permissions . Для файла или папки в Моем диске или на общем диске с capabilities.canModifyEditorContentRestriction необходимо назначить role=writer . Для файла или папки в Моем диске или на общем диске с ограничением содержимого ownerRestricted необходимо быть владельцем файла или иметь role=organizer . Для просмотра элемента с ограничением содержимого пользователи должны иметь role=reader или выше. Полный список ролей см. в разделе Роли и разрешения . Чтобы обновить разрешения для файла, см. раздел Обновление разрешений .
Вы можете использовать логическое поле contentRestrictions.readOnly в ресурсе files для установки ограничения по содержимому. Обратите внимание, что установка ограничения по содержимому для элемента перезаписывает существующее ограничение.
Сценарии ограничений контента
Ограничение на контент объекта на Диске сигнализирует пользователям о том, что его содержимое не следует изменять. Это может быть вызвано следующими причинами:
- Приостановка работы над совместным документом во время периодов проверки или аудита.
- Перевод элемента в завершенное состояние, например, одобренное.
- Предотвращение изменений во время деликатной встречи.
- Запрет на внесение внешних изменений в рабочие процессы, обрабатываемые автоматизированными системами.
- Ограничение редактирования с помощью дополнений Google Apps Script и Google Workspace.
- Предотвращение случайного редактирования документа.
Обратите внимание, что, хотя ограничения на контент могут помочь в управлении контентом, они не должны препятствовать пользователям с достаточными правами продолжать работу с объектом. Кроме того, это не способ создания неизменяемой записи. Ограничения на контент Диска изменяемы, поэтому ограничение на контент для объекта не гарантирует, что он никогда не изменится.
Управление файлами с ограничениями по содержанию
Google Docs, Google Sheets и Google Slides, а также все другие файлы могут содержать ограничения по содержанию.
Ограничение на содержание элемента запрещает вносить изменения в его название и содержание, включая:
- Комментарии и предложения (по документам, таблицам, слайдам и двоичным файлам)
- Ревизии двоичного файла
- Текст и форматирование в Docs
- Текст или формулы в Таблицах, макет Таблиц и экземпляры в Таблицах
- Весь контент в слайдах, а также порядок и количество слайдов
Некоторые типы файлов не могут содержать ограничения по содержанию. Вот несколько примеров:
- Google Формы
- Сайты Google
- Google Рисунки
- Ярлыки и сторонние ярлыки. Подробнее см. в разделах Создание файла ярлыка для содержимого, сохранённого приложением , и Создание ярлыка для файла на Диске .
Добавить ограничение на контент
Чтобы добавить ограничение по содержимому файла, используйте метод files.update , установив поле contentRestrictions.readOnly в значение true . Необязательно укажите reason добавления ограничения, например, «Договор завершен». В следующем примере кода показано, как добавить ограничение по содержимому:
Ява
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();
Питон
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 Диска появляется символ замка ( ). Теперь файл доступен только для чтения.
Снять ограничение на контент
Чтобы снять ограничение на содержимое файла, используйте метод files.update , установив поле contentRestrictions.readOnly в значение false . В следующем примере кода показано, как снять ограничение на содержимое:
Ява
File updatedFile =
new File()
.setContentRestrictions(
ImmutableList.of(new ContentRestriction().setReadOnly(false));
File response = driveService.files().update("FILE_ID", updatedFile).setFields("contentRestrictions").execute();
Питон
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 файла, который вы хотите изменить.
При запуске примера кода файл больше не будет ограничен по содержимому.
Вы также можете использовать интерфейс Диска, чтобы снять ограничение на доступ к контенту и разрешить его редактирование (при наличии соответствующих разрешений). Есть два варианта:
На Диске щелкните правой кнопкой мыши файл с ограничением содержимого и нажмите Разблокировать .
Рисунок 2. Удаление ограничения на содержимое файла в списке файлов Диска. Откройте файл с ограничением по содержанию и нажмите (Заблокированный режим) > Разблокировать файл .
Рисунок 3. Удаление ограничения на содержимое файла в документе.
Проверьте наличие ограничений по содержанию
Чтобы проверить наличие ограничения по контенту, используйте метод files.get с возвращаемым полем contentRestrictions . В следующем примере кода показано, как проверить статус ограничения по контенту:
Ява
File response = driveService.files().get("FILE_ID").setFields("contentRestrictions").execute();
Питон
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 . В следующем примере кода показано, как добавить ограничение по содержимому только для владельцев файлов:
Ява
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();
Питон
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 файла, который вы хотите изменить.
При запуске примера кода доступ к файлу ограничен, и удалить его могут только владельцы. Если вы являетесь владельцем файла, рядом с его именем в пользовательском интерфейсе Диска отображается активный символ замка ( ). Если вы не являетесь владельцем, символ замка неактивен.
Чтобы снять флаг ownerRestricted , используйте метод files.update , установив поле contentRestrictions.ownerRestricted в значение false .
Возможности ограничения контента
Ресурс files содержит набор полей логических capabilities , используемых для указания возможности выполнения действия над файлом.
Ограничения по содержанию включают следующие capabilities :
-
capabilities.canModifyEditorContentRestriction: Может ли текущий пользователь добавлять или изменять ограничение контента . -
capabilities.canModifyOwnerContentRestriction: может ли текущий пользователь добавлять или изменять ограничение содержимого владельца . -
capabilities.canRemoveContentRestriction: может ли текущий пользователь снять примененное ограничение контента (если оно есть).
Для получения дополнительной информации см. раздел Общие сведения о возможностях файлов .
Пример получения capabilities файла см. в разделе Получение возможностей файла .
Запретите пользователям загружать, печатать или копировать ваш файл
Вы можете ограничить возможности пользователей по загрузке, печати и копированию файлов в Диске, Документах, Таблицах и Презентациях.
Чтобы определить, может ли пользователь изменять ограничения на загрузку файла, установленные владельцем или организатором, проверьте логическое поле 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 загружать, печатать или копировать файлы на Диске. Значение поля отражает комбинацию настроек файла, настроек общего диска и правил DLP. Однако контекстная оценка правил DLP не учитывается.
Установка поля copyRequiresWriterPermission в значение false меняет значения полей restrictedForWriters и restrictedForReaders на false . Это означает, что настройки ограничений на загрузку и копирование будут сняты для всех пользователей.
Поля, управляющие функциями загрузки, печати и копирования
В следующей таблице перечислены поля ресурсов files , которые влияют на функциональность загрузки, печати и копирования:
| Поле | Описание | Версия |
|---|---|---|
capabilities.canCopy | Может ли текущий пользователь копировать файл. | версии 2 и 3 |
capabilities.canDownload | Может ли текущий пользователь загрузить файл. | версии 2 и 3 |
capabilities.canChangeCopyRequiresWriterPermission | Может ли текущий пользователь изменить ограничение copyRequiresWriterPermission файла. | версии 2 и 3 |
capabilities.canChangeItemDownloadRestriction | Может ли текущий пользователь изменить ограничение на загрузку файла. | только v3 |
copyRequiresWriterPermission | Следует ли отключить возможность копирования, печати или загрузки этого файла для читателей и комментаторов. | версии 2 и 3 |
downloadRestrictions | Ограничения на загрузку файла. | только v3 |