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

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

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

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

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

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

Унаследованные разрешения нельзя удалить для файла или папки на общем диске. Вместо этого эти разрешения необходимо изменить для прямого или косвенного родительского объекта, от которого они были унаследованы. Унаследованные разрешения можно удалить для элементов в разделах «Мой диск» или «Доступно мне».

И наоборот, унаследованные разрешения для файла или папки в «Моем диске» можно переопределить. Таким образом, если файл наследует role=writer из папки «Мой диск», вы можете установить для него role=reader , чтобы понизить уровень разрешений.

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

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

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

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

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

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

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

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

  • 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 , указав в качестве параметра path fileId соответствующий файл, папка или общий диск, а в качестве параметра path permissionId — разрешение на изменение. Чтобы найти permissionId , используйте метод list ресурса permissions с параметром path fileId .

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

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

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

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

Запрос

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

Ответ

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

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

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

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

Чтобы найти permissionId , используйте метод list ресурса permissions с параметром path fileId . Чтобы получить поле 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
    }
  ]
}

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

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

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

Ява

диск/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;
    }
  }
}

Питон

диск/сниппеты/диск-v3/файл_сниппет/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

диск/сниппеты/диск_v3/файл_сниппеты/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

диск/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 для удаления разрешения.

Для объектов в разделе «Мой диск» можно удалить унаследованное разрешение. Удаление унаследованного разрешения отменяет доступ к объекту и дочерним объектам, если таковые имеются.

Для объектов на общем диске унаследованные разрешения не могут быть отозваны. Вместо этого обновите или удалите разрешение для родительского файла или папки.

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

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

Запрос

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

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

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

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

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

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

Более подробную информацию о сроке действия можно найти в следующих статьях: