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 |