Udostępnianie plików, folderów i dysków

Każdy plik, folder i dysk współdzielony na Dysku Google ma powiązane z nim zasobypermissions. Każdy zasób określa uprawnienia dla konkretnego type (user, group, domain, anyone) i role (owner, organizer, fileOrganizer, writer, commenter, reader). Na przykład plik może mieć uprawnienia przyznające konkretnemu użytkownikowi (type=user) dostęp tylko do odczytu (role=reader), a inne uprawnienia mogą przyznawać członkom konkretnej grupy (type=group) możliwość dodawania komentarzy do pliku (role=commenter).

Pełną listę ról i operacji, które każda z nich umożliwia, znajdziesz w artykule Role i uprawnienia.

Jak uprawnienia są propagowane

Uprawnienia są propagowane w dół z folderów nadrzędnych do wszystkich elementów podrzędnych:

  • Dziedziczone domyślnie: wszystkie pliki i foldery podrzędne automatycznie dziedziczą uprawnienia z folderu nadrzędnego.
  • Nie można ograniczyć uprawnień dotyczących elementów podrzędnych: nie możesz usunąć ani ograniczyć odziedziczonych uprawnień dotyczących elementu podrzędnego. Zmiany muszą zostać wprowadzone w folderze nadrzędnym, z którego pochodzi plik, lub folder musi korzystać z ustawienia ograniczonego dostępu.
  • Można rozszerzyć uprawnienia w przypadku elementów podrzędnych: element podrzędny może przyznawać większe uprawnienia, np. role=writer w przypadku pliku w folderze, w którym użytkownik ma uprawnienia role=reader.
  • Ponowna ocena po przeniesieniu: przeniesienie elementu do nowego folderu nadrzędnego powoduje ponowną ocenę i zastosowanie uprawnień nowego folderu nadrzędnego do elementu i jego elementów podrzędnych.

Linki do plików i kontrola dostępu

Gdy udostępniasz plik lub folder konkretnemu użytkownikowi lub grupie, adres URL umożliwiający dostęp do elementu nie zmienia się i nie jest generowany unikalny link dla każdego użytkownika. Zamiast tego element ma jeden stały link oparty na jego fileId.

Dysk zarządza dostępem, sprawdzając listę kontroli dostępu do elementu. Gdy użytkownik próbuje otworzyć link, Dysk weryfikuje jego uwierzytelnioną tożsamość na podstawie listy ACL. Jeśli uprawnienie zostanie cofnięte lub osiągnie datę wygaśnięcia, użytkownik zostanie usunięty z listy ACL. Jeśli użytkownik spróbuje ponownie otworzyć link, Dysk odmówi dostępu.

Możliwości plików

Zasób permissions określa kto ma dostęp (lista ACL), ale nie wskazuje bezpośrednio, czy bieżący użytkownik może wykonać określone działanie w interfejsie aplikacji.

Zamiast tego zasób files zawiera zbiór pól logicznych capabilities (np. canComment, canShare lub canDelete), które interfejs Google Drive API oblicza dynamicznie na podstawie roli użytkownika i ustawień elementu.

Pobieranie możliwości pliku

Podczas renderowania interfejsu aplikacji sprawdzaj files.capabilities zamiast bezpośrednio analizować uprawnienia:

  • Wywołaj metodę files.get z parametrem fields=capabilities. Więcej informacji znajdziesz w sekcji Zwracanie określonych pól.
  • Użyj zwróconych flag logicznych, aby włączyć lub wyłączyć odpowiednie działania w interfejsie. Na przykład wyłącz komentowanie, jeśli canComment ma wartość false.

Scenariusze udostępniania zasobów Dysku

W tabeli poniżej znajdziesz wymagane role i warunki udostępniania zasobów na Dysku w różnych lokalizacjach i typach elementów:

Lokalizacja Element Wymagane role Najważniejsze ograniczenia
Mój dysk Plik lub folder owner lub writer Wymaga owner, jeśli writersCanShare=false.
Dostęp czasowy do folderów wymaga reader (patrz Ustawianie daty wygaśnięcia).
Dysk współdzielony Plik organizer, fileOrganizer lub writer writersCanShare jest zawsze traktowane jako true.
Dysk współdzielony Folder organizer fileOrganizer może też udostępniać treści, jeśli wartość sharingFoldersRequiresOrganizerPermission to false.
Dysk współdzielony Członkostwo organizer Dotyczy tylko user lub group (nie domen).

Zarządzaj uprawnieniami

W tabeli poniżej znajdziesz podsumowanie metod dostępnych w zasobie permissions:

Metoda punkt końcowy API Kluczowe parametry Dokumentacja
Utwórz POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions role, type, emailAddress lub domain permissions.create
Pobierz GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} fields permissions.get
Wyświetl listę GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions pageSize, supportsAllDrives, pageToken permissions.list
Zaktualizuj PATCH https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} role, allowFileDiscovery permissions.update
Usuń DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} supportsAllDrives permissions.delete

Tworzenie uprawnień

Aby udostępnić plik, folder lub dysk współdzielony, wywołaj metodę create w zasobie permissions z parametrem fileId. Utworzenie uprawnienia powoduje dodanie do elementu nowego wpisu na liście kontroli dostępu i zwrócenie przypisanego permissionId.

W treści żądania podaj te pola:

  • role: poziom dostępu, który chcesz przyznać (np. reader, commenter lub writer). Pełną listę znajdziesz w artykule Role i uprawnienia.
  • type: zakres uprawnień (user, group, domain lub anyone).
  • Identyfikator beneficjenta (wymagany w zależności od type):
    • emailAddress: wymagany, gdy type ma wartość user lub group.
    • domain: wymagany, gdy type ma wartość domain.

Poniższy przykładowy kod pokazuje, jak utworzyć uprawnienie. Odpowiedź zwraca instancję zasobu permissions, w tym przypisany permissionId.

Żądanie

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

Odpowiedź

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

Udostępnianie grupom odbiorców

Grupy odbiorców to obejmujące zbiory osób (na przykład działy lub zespoły) grupy, które możesz polecać użytkownikom, tak by ci udostępniali im swoje elementy. Możesz zachęcić użytkowników do udostępniania elementów konkretnym odbiorcom lub ograniczonej ich grupie, a nie całej organizacji. Grupy odbiorców mogą pomóc Ci zwiększyć bezpieczeństwo i prywatność danych oraz ułatwić użytkownikom odpowiednie udostępnianie.

Aby udostępnić treści grupie docelowych odbiorców, ustaw type=domaindomain na <TARGET_AUDIENCE_ID>.audience.googledomains.com. Szczegółowe informacje o znajdowaniu i tworzeniu grup odbiorców w konsoli administracyjnej Google znajdziesz w artykule Informacje o grupach odbiorców.

Aby dowiedzieć się, jak użytkownicy wchodzą w interakcje z odbiorcami docelowymi, przeczytaj artykuł Wpływ ustawień na interfejs udostępniania linku przez użytkownika.

Uzyskiwanie uprawnień

Aby uzyskać uprawnienie, wywołaj metodę get w zasobie permissions z parametrami ścieżki fileIdpermissionId. Jeśli nie znasz identyfikatora uprawnienia, najpierw wyświetl listę wszystkich uprawnień.

Wyświetlanie listy uprawnień

Aby wyświetlić listę uprawnień do pliku, folderu lub dysku współdzielonego, wywołaj metodę list w zasobie permissions z wymaganym parametrem ścieżki fileId.

Możesz uwzględnić dowolny z tych opcjonalnych parametrów zapytania, aby podzielić odpowiedź na strony lub ją filtrować:

  • pageSize (opcjonalnie): maksymalna liczba uprawnień do zwrócenia na stronie. Jeśli nie jest ustawiona dla plików na dysku współdzielonym, zwracanych jest maksymalnie 100 wyników. Jeśli nie jest ustawiona dla plików, które nie znajdują się na dysku współdzielonym, zwracana jest cała lista.

  • pageToken (opcjonalnie): token strony z poprzedniego wywołania listy, który umożliwia pobranie kolejnej strony.

  • supportsAllDrives (opcjonalnie): czy aplikacja wysyłająca żądanie obsługuje zarówno Mój dysk, jak i dyski współdzielone.

  • useDomainAdminAccess (opcjonalnie): ustaw wartość true, aby wysłać żądanie jako administrator domeny. Osoba wysyłająca prośbę otrzyma dostęp, jeśli parametr fileId odnosi się do dysku współdzielonego, a osoba wysyłająca prośbę jest administratorem domeny, do której należy dysk współdzielony. Więcej informacji znajdziesz w artykule Zarządzanie dyskami współdzielonymi jako administrator domeny.

  • includePermissionsForView (opcjonalnie): dodatkowe uprawnienia do wyświetlania, które mają być uwzględnione w odpowiedzi. Obsługiwana jest tylko wartość published.

  • fields (opcjonalnie): konkretne pola, które mają być zwracane w odpowiedzi. Domyślnie funkcja list zwraca tylko wartości id, type, kindrole. Aby zwrócić dodatkowe pola (np. permissionDetails), określ je za pomocą tego parametru. Więcej informacji znajdziesz w artykule Zwracanie określonych pól.

Określanie źródła roli

Aby zmienić rolę w pliku lub folderze, musisz znać źródło roli. W przypadku dysków współdzielonych źródłem roli może być członkostwo na dysku współdzielonym, rola w folderze lub rola w pliku.

Aby określić źródło roli na dysku współdzielonym lub w elementach na tym dysku, wywołaj metodę get w zasobie permissions z parametrami ścieżki fileId i permissionId oraz parametrem fields ustawionym na pole permissionDetails.

Aby znaleźć permissionId, użyj metody list w zasobie permissions z parametrem ścieżki fileId. Aby pobrać pole permissionDetails w żądaniu list, ustaw parametr fields na permissions/permissionDetails.

To pole zawiera wszystkie dziedziczone i bezpośrednie uprawnienia do plików użytkownika, grupy lub domeny.

Poniższy przykładowy kod pokazuje, jak określić źródło roli. Odpowiedź zwraca permissionDetails zasobu permissions. Pole inheritedFrom zawiera identyfikator elementu, z którego dziedziczone jest uprawnienie.

Żądanie

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

Odpowiedź

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

Aktualizowanie uprawnień

Aby zaktualizować uprawnienia do pliku lub folderu, możesz zmienić przypisaną rolę. Więcej informacji o znajdowaniu źródła roli znajdziesz w artykule Określanie źródła roli.

  1. Wywołaj metodę update w zasobie permissions z parametrem ścieżki fileId ustawionym na powiązany plik, folder lub dysk współdzielony oraz parametrem ścieżki permissionId ustawionym na uprawnienia do zmiany. Aby znaleźć permissionId, użyj metody list w zasobie permissions z parametrem ścieżki fileId.

  2. W prośbie podaj nowy role.

Możesz przyznać uprawnienia do poszczególnych plików lub folderów na dysku współdzielonym, nawet jeśli użytkownik lub grupa jest już członkiem. Na przykład Alex ma role=commenter w ramach członkostwa na dysku współdzielonym. Aplikacja może jednak przyznać Alexowirole=writer dostęp do pliku na dysku współdzielonym. W tym przypadku nowa rola jest bardziej restrykcyjna niż rola przyznana w ramach subskrypcji, więc nowe uprawnienia stają się efektywną rolą dla pliku lub folderu.

Aktualizacje możesz stosować za pomocą semantyki poprawek, co oznacza, że możesz wprowadzać częściowe modyfikacje zasobu. W żądaniu musisz wyraźnie ustawić pola, które chcesz zmodyfikować. Pola, które nie są uwzględnione w żądaniu, zachowują swoje dotychczasowe wartości. Więcej informacji znajdziesz w artykule Praca z częściowymi zasobami.

Oprócz zmiany ról możesz też modyfikować widoczność elementu, gdy uprawnienie type ma wartość domain lub anyone. Aby udostępniony plik był wyszukiwalny lub niepubliczny, w żądaniu PATCH uwzględnij pole logiczne allowFileDiscovery. Ustawienie tej opcji na true umożliwia wyświetlanie elementu w wynikach wyszukiwania dla określonych odbiorców, nawet jeśli nie otrzymali oni bezpośredniego linku. Aby zmienić to ustawienie, nie musisz usuwać uprawnień i tworzyć ich od nowa.

Poniższy przykładowy kod pokazuje, jak zmienić uprawnienia dotyczące pliku lub folderu z commenter na writer. Odpowiedź zwraca instancję zasobu permissions.

Żądanie

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

Odpowiedź

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

Aktualizowanie wielu uprawnień za pomocą żądań zbiorczych

Jednoczesne modyfikowanie uprawnień do tego samego pliku, folderu lub dysku współdzielonego nie jest obsługiwane. To ograniczenie dotyczy wszystkich operacji zmieniających (takich jak aktualizacja lub usuwanie), niezależnie od tego, czy modyfikujesz uprawnienia tego samego czy różnych odbiorców, oraz od tego, czy żądania pochodzą z jednej aplikacji czy od wielu użytkowników.

Dysk ocenia i aktualizuje uprawnienia do elementu jako pojedynczą listę ACL. Jednoczesne operacje powodują wyścig, w którym „wygrywa ostatni zapis”, co może po cichu zastąpić zmiany uprawnień lub wywołać błędy sharingRateLimitExceeded.

Aby uniknąć konfliktów, wprowadzaj zmiany uprawnień dotyczące tego samego elementu sekwencyjnie lub używaj żądań zbiorczych, aby modyfikować wiele uprawnień w ramach jednego żądania.

Poniżej znajdziesz przykład zbiorczej modyfikacji uprawnień za pomocą biblioteki klienta.

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;
    }

}

.NET

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;
        }
    }
}

Usuwanie uprawnień

Aby cofnąć dostęp do pliku lub folderu, wywołaj metodę delete w zasobie permissions z parametrami ścieżki fileIdpermissionId.

Nie można bezpośrednio cofnąć odziedziczonych uprawnień dotyczących elementów podrzędnych. Zamiast tego zaktualizuj lub usuń uprawnienia w folderze nadrzędnym (albo użyj ustawienia ograniczonego dostępu).

Pamiętaj, że usunięcie dostępu użytkownika do elementu nadrzędnego powoduje tylko cofnięcie uprawnień odziedziczonych po tym elemencie. Jeśli użytkownik otrzymał też uprawnienia bezpośrednie do elementu podrzędnego, zachowa do niego dostęp. Aby potwierdzić usunięcie uprawnienia, wywołaj funkcję list z parametrem fileId.

Ustaw datę wygaśnięcia

Aby przyznać tymczasowy dostęp do pliku lub folderu, ustaw pole expirationTime (data i godzina w formacie RFC 3339) podczas wywoływania metod create lub update.

Czasy wygaśnięcia podlegają tym ograniczeniom:

  • Można go ustawić tylko w przypadku uprawnień usergroup (nie domain ani anyone).
  • Czas musi przypadać w przyszłości, maksymalnie za rok.
  • W przypadku folderów dostęp tymczasowy jest obsługiwany tylko w przypadku roli reader.