Membagikan file, folder, dan drive

Setiap file, folder, dan drive bersama Google Drive memiliki resource permissions terkait. Setiap resource mengidentifikasi izin untuk type (user, group, domain, anyone) dan role (owner, organizer, fileOrganizer, writer, commenter, reader) tertentu. Misalnya, file mungkin memiliki izin yang memberikan akses hanya baca (role=reader) kepada pengguna tertentu (type=user), sementara izin lain memberikan kemampuan kepada anggota grup tertentu (type=group) untuk menambahkan komentar ke file (role=commenter).

Untuk mengetahui daftar lengkap peran dan operasi yang diizinkan oleh setiap peran, lihat Peran dan izin.

Cara izin diterapkan

Izin disebarkan ke bawah dari folder induk ke semua item turunan:

  • Diwarisi secara default: Semua file dan folder turunan secara otomatis mewarisi izin dari folder induknya.
  • Tidak dapat dikurangi pada item turunan: Anda tidak dapat menghapus atau mengurangi izin yang diwariskan pada item turunan. Perubahan harus dilakukan pada induk asal, atau folder harus menggunakan setelan akses terbatas.
  • Dapat diperluas pada turunan: Item turunan dapat memberikan peran yang lebih permisif, seperti memberikan role=writer pada file di dalam folder tempat pengguna memiliki role=reader.
  • Dievaluasi ulang saat dipindahkan: Memindahkan item ke folder induk baru akan mengevaluasi ulang dan menerapkan izin induk baru ke item dan turunannya.

Link file dan kontrol akses

Saat Anda membagikan file atau folder kepada pengguna atau grup tertentu, URL untuk mengakses item tidak berubah, dan link unik tidak dibuat untuk setiap pengguna. Sebagai gantinya, item memiliki satu link konstan berdasarkan fileId-nya.

Drive mengontrol akses dengan mengevaluasi ACL item. Saat pengguna berusaha membuka link, Drive akan memverifikasi identitas terautentikasi mereka berdasarkan ACL. Jika izin dicabut atau mencapai tanggal berakhirnya, pengguna akan dihapus dari ACL. Jika pengguna mencoba membuka link lagi, Drive akan menolak akses.

Memahami kemampuan file

Resource permissions menentukan siapa yang memiliki akses (ACL), tetapi tidak secara langsung menunjukkan apakah pengguna saat ini dapat melakukan tindakan tertentu di UI aplikasi Anda.

Sebagai gantinya, resource files berisi kumpulan kolom capabilities boolean (seperti canComment, canShare, atau canDelete) yang dihitung secara dinamis oleh Google Drive API berdasarkan peran pengguna dan setelan item.

Mendapatkan kemampuan file

Saat merender UI aplikasi, periksa files.capabilities daripada mengurai izin secara langsung:

  • Panggil metode files.get dengan fields=capabilities. Untuk mengetahui informasi selengkapnya, lihat Mengembalikan kolom tertentu.
  • Gunakan tanda boolean yang ditampilkan untuk mengaktifkan atau menonaktifkan tindakan yang sesuai di antarmuka Anda. Misalnya, nonaktifkan komentar jika canComment adalah false.

Skenario untuk berbagi resource Drive

Tabel berikut menunjukkan peran dan kondisi yang diperlukan untuk membagikan resource Drive di berbagai lokasi dan jenis item:

Lokasi Item Peran yang diperlukan Batasan utama
Drive Saya File atau folder owner atau writer Memerlukan owner jika writersCanShare=false.
Akses non-permanen ke folder memerlukan reader (lihat Menetapkan tanggal habis masa berlaku).
Drive bersama File organizer, fileOrganizer, atau writer writersCanShare selalu diperlakukan sebagai true.
Drive bersama Folder organizer fileOrganizer juga dapat berbagi jika sharingFoldersRequiresOrganizerPermission adalah false.
Drive bersama Langganan organizer Hanya berlaku untuk user atau group (bukan domain).

Mengelola izin

Tabel berikut merangkum metode yang tersedia di resource permissions:

Metode Endpoint API Parameter utama Referensi
Berkreasi POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions role, type, emailAddress atau domain permissions.create
Dapatkan GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} fields permissions.get
Daftar GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions pageSize, supportsAllDrives, pageToken permissions.list
Update PATCH https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} role, allowFileDiscovery permissions.update
Hapus DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} supportsAllDrives permissions.delete

Membuat izin

Untuk membagikan file, folder, atau drive bersama, panggil metode create di resource permissions dengan fileId. Membuat izin akan menambahkan entri ACL baru ke item dan menampilkan permissionId yang ditetapkan.

Dalam isi permintaan, berikan kolom berikut:

  • role: Tingkat akses yang akan diberikan (misalnya, reader, commenter, atau writer). Untuk daftar lengkap, lihat Peran dan izin.
  • type: Cakupan penerima hibah (user, group, domain, atau anyone).
  • ID penerima hibah (wajib berdasarkan type):
    • emailAddress: Wajib jika type adalah user atau group.
    • domain: Diperlukan jika type adalah domain.

Contoh kode berikut menunjukkan cara membuat izin. Respons menampilkan instance resource permissions, termasuk permissionId yang ditetapkan.

Permintaan

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

Respons

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

Membagikan kepada audiens target

Target audiens adalah kelompok orang—seperti departemen atau tim—yang dapat Anda rekomendasikan kepada pengguna untuk diajak berbagi item. Anda dapat mendorong pengguna untuk berbagi item dengan audiens terbatas atau yang lebih spesifik, bukan seluruh organisasi Anda. Audiens target dapat membantu Anda meningkatkan keamanan dan privasi data Anda, serta memudahkan pengguna berbagi dengan tepat.

Untuk berbagi dengan audiens target, tetapkan type=domain dan tetapkan domain ke <TARGET_AUDIENCE_ID>.audience.googledomains.com. Untuk mengetahui detail cara menemukan atau membuat audiens target di konsol Google Admin, lihat Tentang audiens target.

Untuk melihat cara pengguna berinteraksi dengan target audiens, lihat Pengalaman pengguna untuk berbagi link.

Mendapatkan izin

Untuk mendapatkan izin, panggil metode get pada resource permissions dengan parameter jalur fileId dan permissionId. Jika Anda tidak mengetahui ID izin, cantumkan semua izin terlebih dahulu.

Mencantumkan izin

Untuk mencantumkan izin untuk file, folder, atau drive bersama, panggil metode list di resource permissions dengan parameter jalur fileId yang diperlukan.

Anda dapat menyertakan salah satu parameter kueri opsional berikut untuk melakukan penomoran halaman atau memfilter respons:

  • pageSize (opsional): Jumlah maksimum izin yang akan ditampilkan per halaman. Jika tidak ditetapkan untuk file di drive bersama, paling banyak 100 hasil akan ditampilkan. Jika tidak ditetapkan untuk file yang tidak ada di drive bersama, seluruh daftar akan ditampilkan.

  • pageToken (opsional): Token halaman dari panggilan daftar sebelumnya untuk mengambil halaman berikutnya.

  • supportsAllDrives (opsional): Apakah aplikasi yang meminta mendukung Drive Saya dan drive bersama.

  • useDomainAdminAccess (opsional): Setel ke true untuk mengeluarkan permintaan sebagai administrator domain. Pemohon akan diberi akses jika parameter fileId merujuk ke drive bersama dan pemohon adalah administrator domain tempat drive bersama berada. Untuk mengetahui informasi selengkapnya, lihat Mengelola drive bersama sebagai administrator domain.

  • includePermissionsForView (opsional): Izin lihat tambahan yang akan disertakan dalam respons. Hanya published yang didukung.

  • fields (opsional): Kolom tertentu yang akan ditampilkan dalam respons. Secara default, list hanya menampilkan id, type, kind, dan role. Untuk menampilkan kolom tambahan (seperti permissionDetails), tentukan kolom tersebut menggunakan parameter ini. Untuk informasi selengkapnya, lihat Mengembalikan kolom tertentu.

Menentukan sumber peran

Untuk mengubah peran pada file atau folder, Anda harus mengetahui sumber peran tersebut. Untuk drive bersama, sumber peran dapat didasarkan pada keanggotaan di drive bersama, peran di folder, atau peran di file.

Untuk menentukan sumber peran untuk drive bersama, atau item dalam drive tersebut, panggil metode get di resource permissions dengan parameter jalur fileId dan permissionId, serta parameter fields yang ditetapkan ke kolom permissionDetails.

Untuk menemukan permissionId, gunakan metode list pada resource permissions dengan parameter jalur fileId. Untuk mengambil kolom permissionDetails pada permintaan list, tetapkan parameter fields ke permissions/permissionDetails.

Kolom ini mencantumkan semua izin file yang diwarisi dan langsung untuk pengguna, grup, atau domain.

Contoh kode berikut menunjukkan cara menentukan sumber peran. Respons menampilkan permissionDetails resource permissions. Kolom inheritedFrom memberikan ID item tempat izin diwarisi.

Permintaan

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

Respons

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

Memperbarui izin

Untuk memperbarui izin pada file atau folder, Anda dapat mengubah peran yang ditetapkan. Untuk mengetahui informasi selengkapnya tentang cara menemukan sumber peran, lihat Menentukan sumber peran.

  1. Panggil metode update di resource permissions dengan parameter jalur fileId yang ditetapkan ke file, folder, atau drive bersama terkait dan parameter jalur permissionId yang ditetapkan ke izin yang akan diubah. Untuk menemukan permissionId, gunakan metode list pada resource permissions dengan parameter jalur fileId.

  2. Dalam permintaan, identifikasi role baru.

Anda dapat memberikan izin pada setiap file atau folder di drive bersama meskipun pengguna atau grup sudah menjadi anggota. Misalnya, Alex memiliki role=commenter sebagai bagian dari keanggotaannya di drive bersama. Namun, aplikasi Anda dapat memberikan izin role=writer untuk file di drive bersama kepada Alex. Dalam hal ini, karena peran baru lebih permisif daripada peran yang diberikan melalui keanggotaan mereka, izin baru menjadi peran efektif untuk file atau folder.

Anda dapat menerapkan update melalui semantik patch, yang berarti Anda dapat melakukan modifikasi parsial pada resource. Anda harus menetapkan secara eksplisit kolom yang ingin diubah dalam permintaan Anda. Kolom apa pun yang tidak disertakan dalam permintaan akan mempertahankan nilai yang ada. Untuk mengetahui informasi selengkapnya, lihat Bekerja dengan resource parsial.

Selain mengubah peran, Anda juga dapat mengubah kemampuan penemuan item saat izin type adalah domain atau anyone. Agar file bersama dapat ditelusuri atau tidak tercantum, sertakan kolom boolean allowFileDiscovery dalam permintaan patch Anda. Menyetelnya ke true memungkinkan item muncul di hasil penelusuran untuk audiens yang ditentukan, meskipun mereka belum diberi link langsung. Anda tidak perlu menghapus dan membuat ulang izin untuk mengubah setelan ini.

Contoh kode berikut menunjukkan cara mengubah izin pada file atau folder dari commenter menjadi writer. Respons menampilkan instance resource permissions.

Permintaan

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

Respons

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

Memperbarui beberapa izin dengan permintaan batch

Modifikasi izin serentak pada file, folder, atau drive bersama yang sama tidak didukung. Batasan ini berlaku untuk semua operasi perubahan (seperti update atau delete), terlepas dari apakah Anda mengubah izin untuk penerima yang sama atau penerima yang berbeda, dan apakah permintaan berasal dari satu aplikasi atau beberapa pengguna.

Drive mengevaluasi dan memperbarui izin item sebagai satu ACL. Operasi serentak menyebabkan kondisi race saat "penulisan terakhir menang", yang dapat secara diam-diam menimpa perubahan izin atau memicu error sharingRateLimitExceeded.

Untuk menghindari konflik, jalankan perubahan izin pada item yang sama secara berurutan, atau gunakan permintaan batch untuk mengubah beberapa izin dalam satu permintaan.

Berikut adalah contoh melakukan modifikasi izin batch dengan library klien.

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

Menghapus izin

Untuk mencabut akses ke file atau folder, panggil metode delete pada resource permissions dengan parameter jalur fileId dan permissionId.

Izin yang diwariskan tidak dapat dicabut secara langsung pada item turunan. Perbarui atau hapus izin di folder induk (atau gunakan setelan akses terbatas).

Perhatikan bahwa menghapus akses pengguna dari item induk hanya akan mencabut izin yang diwarisi dari induk tersebut. Jika pengguna juga diberi izin langsung pada item turunan, akses langsung tersebut akan tetap ada. Untuk mengonfirmasi bahwa izin dihapus, panggil list dengan fileId.

Tetapkan tanggal habis masa berlaku

Untuk memberikan akses sementara ke file atau folder, tetapkan kolom expirationTime (tanggal dan waktu RFC 3339) saat memanggil metode create atau update.

Waktu habis masa berlaku memiliki batasan berikut:

  • Hanya dapat disetel pada izin user dan group (bukan domain atau anyone).
  • Waktu harus di masa mendatang, hingga maksimum satu tahun.
  • Untuk folder, akses sementara hanya didukung dengan peran reader.