Защита содержимого файла

API Google Диска поддерживает несколько способов предотвращения изменения файлов, включая ограничение содержимого файлов и запрет на загрузку, печать или копирование файлов.

Сделайте файлы доступными только для чтения с ограничениями на содержимое Диска

Вы можете добавить ограничение содержания в файл Google Диска, чтобы запретить пользователям выполнять следующие действия:

  • Изменение названия
  • Внесение правок в контент
  • Загрузка версии
  • Добавление или изменение комментариев

Применение ограничений контента – это механизм, который позволяет сделать содержимое объекта Диска доступным только для чтения без изменения прав доступа к этому элементу. Это означает, что это не ограничение доступа. Хотя пользователи не могут изменять содержимое файла, другие операции по-прежнему разрешены в зависимости от уровня доступа (например, пользователь с правами на редактирование по-прежнему может перемещать элемент или изменять настройки его общего доступа).

Чтобы добавить или снять ограничение на содержимое файла на Диске, у пользователя должны быть соответствующие разрешения . Для файла или папки в «Моем диске» или на общем диске с параметром capabilities.canModifyEditorContentRestriction вам необходимо назначить role=writer . Для файла или папки в «Моем диске» или на общем диске с ограничением содержимого ownerRestricted вы должны быть владельцем файла или иметь role=organizer . Чтобы просмотреть элемент с ограничением содержимого, пользователи должны иметь role=reader или выше. Полный список ролей см. в разделе Роли и разрешения . Чтобы изменить разрешения для файла, см. Изменение разрешений .

Вы можете использовать логическое поле contentRestrictions.readOnly в ресурсе files чтобы установить ограничение содержимого. Обратите внимание, что установка ограничения содержимого для элемента перезаписывает существующее.

Сценарии ограничения контента

Ограничение содержания элемента на Диске сигнализирует пользователям о том, что содержимое не следует изменять. Это может быть по некоторым из следующих причин:

  • Приостановка работы над совместным документом во время периодов проверки или аудита.
  • Приведение элемента в завершенное состояние, например утвержденное.
  • Предотвращение изменений во время конфиденциальной встречи.
  • Запрет внешних изменений в рабочих процессах, обрабатываемых автоматизированными системами.
  • Ограничение редактирования с помощью Google Apps Script и надстроек Google Workspace.
  • Как избежать случайного редактирования документа.

Однако обратите внимание: хотя ограничения контента могут помочь в управлении контентом, они не предназначены для того, чтобы помешать пользователям с достаточными разрешениями продолжать работу над элементом. Кроме того, это не способ создания неизменяемой записи. Ограничения на содержимое Диска являются изменяемыми, поэтому ограничение содержимого для элемента не гарантирует, что этот элемент никогда не изменится.

Управление файлами с ограничениями по содержимому

Документы 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 Диска появляется символ замка ( ). Теперь файл доступен только для чтения.

Файл с ограничением по содержанию в списке файлов на Диске.
Рисунок 1. Файл с ограничением по содержимому в списке файлов на Диске.

Снимите ограничение на контент

Чтобы снять ограничение на содержимое файла, используйте метод 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 файла, который вы хотите изменить.

При запуске примера кода файл больше не имеет ограничений по содержимому.

Вы также можете использовать интерфейс Диска, чтобы снять ограничение на контент и разрешить редактирование контента (при наличии соответствующих разрешений). Есть два варианта сделать это:

  1. На Диске щелкните правой кнопкой мыши файл с ограничением содержимого и выберите «Разблокировать .

    Снимите ограничение на содержимое файла в списке файлов на Диске.
    Рисунок 2. Снимите ограничение на содержимое файла в списке файлов на Диске.
  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 файла см. в разделе Проверка разрешений пользователя .

Запретите пользователям загружать, распечатывать или копировать ваш файл

Вы можете ограничить возможности пользователей с разрешениями role=commenter или role=reader загружать, распечатывать и копировать файлы на Диске, в Документах, Таблицах и Презентациях.

Чтобы удалить параметры загрузки, печати и копирования файлов, используйте метод files.update с логическим полем copyRequiresWriterPermission установленным в true .