Делитесь файлами, папками и дисками

Каждый файл, папка и общий диск Google Drive имеют связанные с ними ресурсы permissions . Каждый ресурс определяет разрешение для определенного type ( user , group , domain , anyone ) и role ( owner , organizer , организатор fileOrganizer , writer , commenter , reader ). Например, файл может иметь разрешение, предоставляющее определенному пользователю ( type=user ) доступ только для чтения ( role=reader ), в то время как другое разрешение предоставляет членам определенной группы ( type=group ) возможность добавлять комментарии к файлу ( role=commenter ).

Полный список ролей и разрешенных для каждой из них операций см. в разделе «Роли и разрешения» .

Как работают разрешения

Списки разрешений для папки распространяются вниз. Все дочерние файлы и папки наследуют разрешения от родительской папки. При каждом изменении разрешений или иерархии распространение происходит рекурсивно по всем вложенным папкам. Например, если файл существует в папке, а затем эта папка перемещается в другую папку, разрешения новой папки распространяются на файл. Если новая папка предоставляет пользователю файла новую роль, например, «писатель», она переопределяет его старую роль.

И наоборот, если файл наследует role=writer от папки и перемещается в другую папку, которая предоставляет роль "reader", то теперь файл наследует role=reader .

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

Унаследованные права доступа можно увеличить для элемента. Если права доступа увеличиваются для дочернего элемента, изменение прав доступа родителя не влияет на права доступа дочернего элемента, если только права доступа нового родителя не превышают права доступа дочернего элемента.

Одновременные операции с правами доступа к одному и тому же файлу не поддерживаются. Применяется только последнее обновление.

Понимание возможностей файлов

Ресурс permissions в конечном итоге не определяет возможности текущего пользователя выполнять действия с файлом или папкой. Вместо этого ресурс files содержит набор логических полей capabilities , используемых для указания того, можно ли выполнить действие с файлом или папкой. API Google Drive устанавливает эти поля на основе ресурса permissions текущего пользователя, связанного с файлом или папкой.

Например, когда Алекс входит в ваше приложение и пытается поделиться файлом, проверяется наличие у Алекса прав доступа к файлу в соответствии с его ролью. Если роль позволяет ему делиться файлом, то capabilities , связанные с файлом, такие как canShare , устанавливаются относительно роли. Если Алекс хочет поделиться файлом, ваше приложение проверяет capabilities , чтобы убедиться, что canShare установлен в true .

Получить возможности файла

Когда ваше приложение открывает файл, оно должно проверить права доступа к файлу и отобразить пользовательский интерфейс в соответствии с разрешениями текущего пользователя. Например, если у пользователя нет права canComment к файлу, возможность комментирования должна быть отключена в пользовательском интерфейсе.

Чтобы проверить возможности, вызовите метод get ресурса files с параметром `path` fileId и параметром fields , установленным на поле capabilities . Дополнительную информацию о возврате полей с помощью параметра ` fields см. в разделе «Возврат определенных полей» .

Приведённый ниже пример кода демонстрирует проверку прав пользователя. В ответ возвращается список возможностей, которыми пользователь обладает при работе с файлом. Каждая возможность соответствует детальному действию, которое может выполнить пользователь. Некоторые поля заполняются только для элементов на общих дисках.

Запрос

GET https://www.googleapis.com/drive/v3/files/FILE_ID?fields=capabilities

Ответ

{
  "capabilities": {
    "canAcceptOwnership": false,
    "canAddChildren": false,
    "canAddMyDriveParent": false,
    "canChangeCopyRequiresWriterPermission": true,
    "canChangeItemDownloadRestriction": true,
    "canChangeSecurityUpdateEnabled": false,
    "canChangeViewersCanCopyContent": true,
    "canComment": true,
    "canCopy": true,
    "canDelete": true,
    "canDisableInheritedPermissions": false,
    "canDownload": true,
    "canEdit": true,
    "canEnableInheritedPermissions": true,
    "canListChildren": false,
    "canModifyContent": true,
    "canModifyContentRestriction": true,
    "canModifyEditorContentRestriction": true,
    "canModifyOwnerContentRestriction": true,
    "canModifyLabels": true,
    "canMoveChildrenWithinDrive": false,
    "canMoveItemIntoTeamDrive": true,
    "canMoveItemOutOfDrive": true,
    "canMoveItemWithinDrive": true,
    "canReadLabels": true,
    "canReadRevisions": true,
    "canRemoveChildren": false,
    "canRemoveContentRestriction": false,
    "canRemoveMyDriveParent": true,
    "canRename": true,
    "canShare": true,
    "canTrash": true,
    "canUntrash": true
  }
}

Сценарии совместного использования ресурсов Диска

Существует пять различных типов сценариев совместного использования:

  1. Для предоставления общего доступа к файлу в разделе «Мой диск» пользователь должен иметь role=writer или role=owner .

  2. Для предоставления общего доступа к папке в разделе «Мой диск» пользователь должен иметь role=writer или role=owner .

  3. Для предоставления общего доступа к файлу на общем диске пользователь должен иметь role=writer , role=fileOrganizer или role=organizer .

    • Параметр writersCanShare не применяется к элементам на общих дисках. Он рассматривается как всегда имеющий значение true .
  4. Для предоставления общего доступа к папке на общем диске пользователь должен иметь role=organizer .

    • Если для параметра sharingFoldersRequiresOrganizerPermission на общем диске установлено значение false , пользователи с role=fileOrganizer смогут предоставлять общий доступ к папкам на этом общем диске.
  5. Для управления членством в общих дисках пользователь должен иметь role=organizer . Членами общих дисков могут быть только пользователи и группы.

Используйте параметр fields.

Если вы хотите указать поля, которые должны быть возвращены в ответе, вы можете задать системный параметр fields с помощью любого метода ресурса permissions . Если вы опустите параметр fields , сервер вернет набор полей по умолчанию, специфичных для данного метода. Например, метод list возвращает только поля id , type , kind и role для каждого файла. Чтобы вернуть другие поля, см. раздел «Возврат определенных полей» .

Создайте разрешение

При создании разрешения необходимо заполнить следующие два поля:

  • type : type определяет область действия разрешений ( user , group , domain или anyone ). Разрешение с type=user применяется к конкретному пользователю, тогда как разрешение с type=domain применяется ко всем пользователям в конкретном домене.

  • role : Поле role определяет операции, которые может выполнять данный type . Например, разрешение с type=user и role=reader предоставляет конкретному пользователю доступ только для чтения к файлу или папке. Или разрешение с type=domain и role=commenter позволяет всем пользователям домена добавлять комментарии к файлу. Полный список ролей и разрешенных для каждой из них операций см. в разделе «Роли и разрешения» .

При создании разрешения с type=user или type=group необходимо также указать emailAddress , чтобы связать конкретного пользователя или группу с этим разрешением.

При создании разрешения с type=domain необходимо также указать domain , чтобы связать конкретное доменное имя с этим разрешением.

Для создания разрешения:

  1. Используйте метод create для ресурса permissions , передав в качестве параметра пути fileId соответствующий файл или папку.
  2. В теле запроса укажите type и role .
  3. Если type=user или type=group , укажите emailAddress . Если type=domain , укажите domain .

Приведённый ниже пример кода демонстрирует, как создать разрешение. В ответ возвращается экземпляр ресурса permissions , включая присвоенный permissionId ).

Запрос

POST https://www.googleapis.com/drive/v3/files/FILE_ID/permissions
{
  "requests": [
    {
        "type": "user",
        "role": "commenter",
        "emailAddress": "alex@altostrat.com"
    }
  ]
}

Ответ

{
    "kind": "drive#permission",
    "id": "PERMISSION_ID",
    "type": "user",
    "role": "commenter"
}

Используйте целевую аудиторию

Целевые аудитории — это группы людей, например, отделы или команды, которым вы можете рекомендовать пользователям делиться своими материалами. Вы можете поощрять пользователей делиться материалами с более конкретной или ограниченной аудиторией, а не со всей организацией. Целевые аудитории могут помочь вам повысить безопасность и конфиденциальность ваших данных, а также упростить для пользователей возможность надлежащего обмена информацией. Для получения дополнительной информации см. раздел «О целевых аудиториях» .

Для использования целевой аудитории:

  1. В консоли администратора Google перейдите в > Каталог > Целевые аудитории .

    Перейти к целевой аудитории

    Для выполнения этой задачи необходимо войти в систему, используя учетную запись с правами суперадминистратора .

  2. В списке «Целевые аудитории» щелкните название целевой аудитории. Чтобы создать целевую аудиторию, см. раздел «Создание целевой аудитории».

  3. Скопируйте уникальный идентификатор из URL-адреса целевой аудитории: https://admin.google.com/ac/targetaudiences/ ID .

  4. Создайте разрешение с type=domain и установите поле domain в ID .audience.googledomains.com .

Чтобы узнать, как пользователи взаимодействуют с целевой аудиторией, см. раздел «Пользовательский опыт при обмене ссылками» .

Получите разрешение

Чтобы получить разрешение, используйте метод get ресурса permissions с параметрами ` fileId и permissionId в качестве пути. Если идентификатор разрешения неизвестен, вы можете вывести список всех разрешений с помощью метода list .

Приведённый ниже пример кода демонстрирует, как получить разрешение по идентификатору. В ответе возвращается экземпляр ресурса permissions .

Запрос

GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissionsPERMISSION_ID

Ответ

{
  "kind": "drive#permissionList",
  "permissions": [
    {
      "kind": "drive#permission",
      "id": "PERMISSION_ID",
      "type": "user",
      "role": "commenter"
    }
  ]
}

Перечислите все разрешения.

Чтобы вывести список разрешений для файла, папки или общего диска, используйте метод ` list ресурса permissions с параметром fileId path`.

Передайте следующие параметры запроса , чтобы настроить пагинацию или фильтрацию разрешений:

  • pageSize : Максимальное количество разрешений, возвращаемых на странице. Если не задано для файлов на общем диске, возвращается не более 100 результатов. Если не задано для файлов, не находящихся на общем диске, возвращается весь список.

  • pageToken : Токен страницы, полученный из предыдущего вызова списка. Предоставьте этот токен для получения следующей страницы.

  • supportsAllDrives : Указывает, поддерживает ли запрашивающее приложение одновременно «Мои диски» и «Общие диски».

  • useDomainAdminAccess : Установите значение true , чтобы отправить запрос от имени администратора домена. Если параметр fileId относится к общему диску, а запрашивающий является администратором домена, к которому принадлежит общий диск. Для получения дополнительной информации см. раздел «Управление общими дисками от имени администраторов домена» .

  • includePermissionsForView : Разрешения дополнительного представления, которые будут включены в ответ. Поддерживается только published .

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

Запрос

GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions

Ответ

{
  "kind": "drive#permissionList",
  "permissions": [
    {
      "id": "PERMISSION_ID",
      "type": "user",
      "kind": "drive#permission",
      "role": "commenter"
    }
  ]
}

Обновить права доступа

Чтобы изменить права доступа к файлу или папке, можно изменить назначенную роль. Дополнительную информацию о том, как определить источник роли, см. в разделе «Определение источника роли» .

  1. Вызовите метод update ресурса permissions , указав в параметре fileId path` путь к связанному файлу, папке или общему диску, а в параметре permissionId path` — разрешение на изменение. Чтобы найти ` permissionId , используйте метод list ресурса permissions с параметром ` fileId path`.

  2. В запросе укажите новую role .

Вы можете предоставлять разрешения на отдельные файлы или папки на общем диске, даже если пользователь или группа уже являются его членами. Например, у Алекса есть role=commenter в рамках его членства на общем диске. Однако ваше приложение может предоставить Алексу role=writer для файла на общем диске. В этом случае, поскольку новая роль более разрешительная, чем роль, предоставленная в рамках его членства, новое разрешение становится фактической ролью для файла или папки.

Вы можете применять обновления с помощью семантики патчей, то есть вносить частичные изменения в ресурс. Необходимо явно указать поля, которые вы собираетесь изменить, в вашем запросе. Любые поля, не включенные в запрос, сохраняют свои существующие значения. Для получения дополнительной информации см. раздел «Работа с частично измененными ресурсами» .

Приведённый ниже пример кода демонстрирует, как изменить права доступа к файлу или папке с commenter на writer . В ответ возвращается экземпляр ресурса permissions .

Запрос

PATCH https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID
{
  "role": "writer"
}

Ответ

{
  "kind": "drive#permission",
  "id": "PERMISSION_ID",
  "type": "user",
  "role": "writer"
}

Определите источник роли

Чтобы изменить роль файла или папки, необходимо знать источник этой роли. Для общих дисков источником роли может быть членство в общем диске, роль папки или роль файла.

Чтобы определить источник ролей для общего диска или элементов на этом диске, вызовите метод get ресурса permissions с параметрами fileId и permissionId , а параметр ` fields установите равным полю permissionDetails .

Чтобы найти permissionId , используйте метод list ресурса permissions с параметром fileId path. Чтобы получить поле permissionDetails в запросе list , установите параметр fields в значение permissions/permissionDetails .

В этом поле перечислены все унаследованные и прямые права доступа к файлам для пользователя, группы или домена.

Приведенный ниже пример кода показывает, как определить источник роли. В ответ возвращается permissionDetails permissions ресурса. Поле inheritedFrom содержит идентификатор элемента, от которого наследуется разрешение.

Запрос

GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID?fields=permissionDetails&supportsAllDrives=true

Ответ

{
  "permissionDetails": [
    {
      "permissionType": "member",
      "role": "commenter",
      "inheritedFrom": "INHERITED_FROM_ID",
      "inherited": true
    },
    {
      "permissionType": "file",
      "role": "writer",
      "inherited": false
    }
  ]
}

Обновление нескольких разрешений с помощью пакетных запросов

Мы настоятельно рекомендуем использовать пакетные запросы для изменения нескольких разрешений.

Ниже приведён пример пакетного изменения прав доступа к клиентской библиотеке.

Java

drive/snippets/drive_v3/src/main/java/ShareFile.java
import com.google.api.client.googleapis.batch.BatchRequest;
import com.google.api.client.googleapis.batch.json.JsonBatchCallback;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpHeaders;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.Permission;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* Class to demonstrate use-case of modify permissions. */
public class ShareFile {

  /**
   * Batch permission modification.
   * realFileId file Id.
   * realUser User Id.
   * realDomain Domain of the user ID.
   *
   * @return list of modified permissions if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static List<String> shareFile(String realFileId, String realUser, String realDomain)
      throws IOException {
        /* Load pre-authorized user credentials from the environment.
         TODO(developer) - See https://developers.google.com/identity for
         guides on implementing OAuth2 for your application.application*/
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    Drive service = new Drive.Builder(new NetHttpTransport(),
        GsonFactory.getDefaultInstance(),
        requestInitializer)
        .setApplicationName("Drive samples")
        .build();

    final List<String> ids = new ArrayList<String>();


    JsonBatchCallback<Permission> callback = new JsonBatchCallback<Permission>() {
      @Override
      public void onFailure(GoogleJsonError e,
                            HttpHeaders responseHeaders)
          throws IOException {
        // Handle error
        System.err.println(e.getMessage());
      }

      @Override
      public void onSuccess(Permission permission,
                            HttpHeaders responseHeaders)
          throws IOException {
        System.out.println("Permission ID: " + permission.getId());

        ids.add(permission.getId());

      }
    };
    BatchRequest batch = service.batch();
    Permission userPermission = new Permission()
        .setType("user")
        .setRole("writer");

    userPermission.setEmailAddress(realUser);
    try {
      service.permissions().create(realFileId, userPermission)
          .setFields("id")
          .queue(batch, callback);

      Permission domainPermission = new Permission()
          .setType("domain")
          .setRole("reader");

      domainPermission.setDomain(realDomain);

      service.permissions().create(realFileId, domainPermission)
          .setFields("id")
          .queue(batch, callback);

      batch.execute();

      return ids;
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to modify permission: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/file_snippet/share_file.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def share_file(real_file_id, real_user, real_domain):
  """Batch permission modification.
  Args:
      real_file_id: file Id
      real_user: User ID
      real_domain: Domain of the user ID
  Prints modified permissions

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)
    ids = []
    file_id = real_file_id

    def callback(request_id, response, exception):
      if exception:
        # Handle error
        print(exception)
      else:
        print(f"Request_Id: {request_id}")
        print(f'Permission Id: {response.get("id")}')
        ids.append(response.get("id"))

    # pylint: disable=maybe-no-member
    batch = service.new_batch_http_request(callback=callback)
    user_permission = {
        "type": "user",
        "role": "writer",
        "emailAddress": "user@example.com",
    }
    batch.add(
        service.permissions().create(
            fileId=file_id,
            body=user_permission,
            fields="id",
        )
    )
    domain_permission = {
        "type": "domain",
        "role": "reader",
        "domain": "example.com",
    }
    domain_permission["domain"] = real_domain
    batch.add(
        service.permissions().create(
            fileId=file_id,
            body=domain_permission,
            fields="id",
        )
    )
    batch.execute()

  except HttpError as error:
    print(f"An error occurred: {error}")
    ids = None

  return ids


if __name__ == "__main__":
  share_file(
      real_file_id="1dUiRSoAQKkM3a4nTPeNQWgiuau1KdQ_l",
      real_user="gduser1@workspacesamples.dev",
      real_domain="workspacesamples.dev",
  )

Node.js

drive/snippets/drive_v3/file_snippets/share_file.js
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';

/**
 * Shares a file with a user and a domain.
 * @param {string} fileId The ID of the file to share.
 * @param {string} targetUserEmail The email address of the user to share with.
 * @param {string} targetDomainName The domain to share with.
 * @return {Promise<Array<string>>} A promise that resolves to an array of permission IDs.
 */
async function shareFile(fileId, targetUserEmail, targetDomainName) {
  // Authenticate with Google and get an authorized client.
  // TODO (developer): Use an appropriate auth mechanism for your app.
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });

  // Create a new Drive API client (v3).
  const service = google.drive({version: 'v3', auth});

  /** @type {Array<string>} */
  const permissionIds = [];

  // The permissions to create.
  const permissions = [
    {
      type: 'user',
      role: 'writer',
      emailAddress: targetUserEmail, // e.g., 'user@partner.com'
    },
    {
      type: 'domain',
      role: 'writer',
      domain: targetDomainName, // e.g., 'example.com'
    },
  ];

  // Iterate through the permissions and create them one by one.
  for (const permission of permissions) {
    const result = await service.permissions.create({
      requestBody: permission,
      fileId,
      fields: 'id',
    });

    if (result.data.id) {
      permissionIds.push(result.data.id);
      console.log(`Inserted permission id: ${result.data.id}`);
    } else {
      throw new Error('Failed to create permission');
    }
  }
  return permissionIds;
}

PHP

drive/snippets/drive_v3/src/DriveShareFile.php
<?php
use Google\Client;
use Google\Service\Drive;
function shareFile()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $realFileId = readline("Enter File Id: ");
        $realUser = readline("Enter user email address: ");
        $realDomain = readline("Enter domain name: ");
        $ids = array();
            $fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
            $fileId = $realFileId;
            $driveService->getClient()->setUseBatch(true);
            try {
                $batch = $driveService->createBatch();

                $userPermission = new Drive\Permission(array(
                    'type' => 'user',
                    'role' => 'writer',
                    'emailAddress' => 'user@example.com'
                ));
                $userPermission['emailAddress'] = $realUser;
                $request = $driveService->permissions->create(
                    $fileId, $userPermission, array('fields' => 'id'));
                $batch->add($request, 'user');
                $domainPermission = new Drive\Permission(array(
                    'type' => 'domain',
                    'role' => 'reader',
                    'domain' => 'example.com'
                ));
                $userPermission['domain'] = $realDomain;
                $request = $driveService->permissions->create(
                    $fileId, $domainPermission, array('fields' => 'id'));
                $batch->add($request, 'domain');
                $results = $batch->execute();

                foreach ($results as $result) {
                    if ($result instanceof Google_Service_Exception) {
                        // Handle error
                        printf($result);
                    } else {
                        printf("Permission ID: %s\n", $result->id);
                        array_push($ids, $result->id);
                    }
                }
            } finally {
                $driveService->getClient()->setUseBatch(false);
            }
            return $ids;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    }

}

.СЕТЬ

drive/snippets/drive_v3/DriveV3Snippets/ShareFile.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Requests;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use-case of Drive modify permissions.
    public class ShareFile
    {
        /// <summary>
        /// Batch permission modification.
        /// </summary>
        /// <param name="realFileId">File id.</param>
        /// <param name="realUser">User id.</param>
        /// <param name="realDomain">Domain id.</param>
        /// <returns>list of modified permissions, null otherwise.</returns>
        public static IList<String> DriveShareFile(string realFileId, string realUser, string realDomain)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                var ids = new List<String>();
                var batch = new BatchRequest(service);
                BatchRequest.OnResponse<Permission> callback = delegate(
                    Permission permission,
                    RequestError error,
                    int index,
                    HttpResponseMessage message)
                {
                    if (error != null)
                    {
                        // Handle error
                        Console.WriteLine(error.Message);
                    }
                    else
                    {
                        Console.WriteLine("Permission ID: " + permission.Id);
                    }
                };
                Permission userPermission = new Permission()
                {
                    Type = "user",
                    Role = "writer",
                    EmailAddress = realUser
                };

                var request = service.Permissions.Create(userPermission, realFileId);
                request.Fields = "id";
                batch.Queue(request, callback);

                Permission domainPermission = new Permission()
                {
                    Type = "domain",
                    Role = "reader",
                    Domain = realDomain
                };
                request = service.Permissions.Create(domainPermission, realFileId);
                request.Fields = "id";
                batch.Queue(request, callback);
                var task = batch.ExecuteAsync();
                task.Wait();
                return ids;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Удалить разрешение

Чтобы отозвать доступ к файлу или папке, вызовите метод delete ресурса permissions , указав в качестве параметров fileId и permissionId path, чтобы удалить разрешение.

Унаследованные разрешения нельзя отозвать. Вместо этого обновите или удалите разрешения для родительского файла или папки. Удаление разрешения для папки отзывает доступ к этому элементу и дочерним элементам, если таковые имеются.

Для ограничения прав доступа по сравнению с родительским доступом необходимо использовать настройку ограниченного доступа .

Приведенный ниже пример кода показывает, как отозвать доступ, удалив permissionId . В случае успеха тело ответа будет представлять собой пустой JSON-объект. Чтобы подтвердить удаление разрешения, используйте метод list ресурса permissions с параметром fileId path.

Запрос

DELETE https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID

Установите срок действия, чтобы ограничить доступ к товару.

При работе над конфиденциальным проектом может возникнуть необходимость ограничить доступ к определенным элементам в Google Диска по истечении определенного периода времени. Для файлов и папок можно установить дату истечения срока действия, чтобы ограничить или запретить доступ к этому элементу.

Чтобы установить срок действия:

Поле expirationTime указывает, когда истекает срок действия разрешения, используя формат даты и времени RFC 3339. Время истечения срока действия имеет следующие ограничения:

  • Их можно установить только для прав доступа пользователей и групп.
  • Время должно быть в будущем.
  • Этот период не может быть отложен более чем на один год.
  • Только reader имеет право на временное ограничение доступа к папке.

Для получения более подробной информации о сроке годности см. следующие статьи: