API Google Диска поддерживает несколько способов предотвращения изменения файлов, включая ограничение содержимого файлов и запрет на загрузку, печать или копирование файлов.
Сделайте файлы доступными только для чтения с ограничениями на содержимое Диска
Вы можете добавить ограничение содержания в файл Google Диска, чтобы запретить пользователям выполнять следующие действия:
- Изменение названия
- Внесение правок в контент
- Загрузка версии
- Добавление или изменение комментариев
Применение ограничений контента – это механизм, который позволяет сделать содержимое объекта Диска доступным только для чтения без изменения прав доступа к этому элементу. Это означает, что это не ограничение доступа. Хотя пользователи не могут изменять содержимое файла, другие операции по-прежнему разрешены в зависимости от уровня доступа (например, пользователь с правами на редактирование по-прежнему может перемещать элемент или изменять настройки его общего доступа).
Чтобы добавить или снять ограничение на содержимое файла на Диске, у пользователя должны быть соответствующие разрешения . Для файла или папки в «Моем диске» или на общем диске с параметром capabilities.canModifyEditorContentRestriction
вам необходимо назначить role=writer
. Для файла или папки в «Моем диске» или на общем диске с ограничением содержимого ownerRestricted
вы должны быть владельцем файла или иметь role=organizer
. Чтобы просмотреть элемент с ограничением содержимого, пользователи должны иметь role=reader
или выше. Полный список ролей см. в разделе Роли и разрешения . Чтобы изменить разрешения для файла, см. Изменение разрешений .
Вы можете использовать логическое поле contentRestrictions.readOnly
в ресурсе files
чтобы установить ограничение содержимого. Обратите внимание, что установка ограничения содержимого для элемента перезаписывает существующее.
Сценарии ограничения контента
Ограничение содержания элемента на Диске сигнализирует пользователям о том, что содержимое не следует изменять. Это может быть по некоторым из следующих причин:
- Приостановка работы над совместным документом во время периодов проверки или аудита.
- Приведение элемента в завершенное состояние, например утвержденное.
- Предотвращение изменений во время конфиденциальной встречи.
- Запрет внешних изменений в рабочих процессах, обрабатываемых автоматизированными системами.
- Ограничение редактирования с помощью Google Apps Script и дополнений Google Workspace.
- Как избежать случайного редактирования документа.
Однако обратите внимание: хотя ограничения контента могут помочь в управлении контентом, они не предназначены для того, чтобы помешать пользователям с достаточными разрешениями продолжать работу над элементом. Кроме того, это не способ создания неизменяемой записи. Ограничения на содержимое Диска являются изменяемыми, поэтому ограничение содержимого для элемента не гарантирует, что этот элемент никогда не изменится.
Управление файлами с ограничениями по содержимому
Документы Google, Таблицы Google и Презентации 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
файла, который вы хотите изменить.
При запуске примера кода файл больше не имеет ограничений по содержимому.
Вы также можете использовать интерфейс Диска, чтобы снять ограничение на контент и разрешить редактирование контента (при наличии соответствующих разрешений). Есть два варианта сделать это:
На Диске щелкните правой кнопкой мыши файл с ограничением содержимого и выберите «Разблокировать
.Откройте файл с ограничением содержимого и нажмите (Режим блокировки) > «Разблокировать файл» .
Проверьте наличие ограничения контента
Чтобы проверить наличие ограничения содержимого, используйте метод 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
файла см. в разделе Проверка разрешений пользователя .
Запретите пользователям загружать, распечатывать или копировать ваш файл
Вы можете ограничить возможность пользователей с разрешениями role=commenter
или role=reader
загружать, распечатывать и копировать файлы на Диске, в Документах, Таблицах и Презентациях.
Чтобы удалить параметры загрузки, печати и копирования файлов, используйте метод files.update
с логическим полем copyRequiresWriterPermission
установленным в true
.