Mengelola drive bersama

Panduan ini berisi tugas terkait pengelolaan drive bersama, seperti membuat drive bersama dan mengelola anggota serta izin, menggunakan Google Drive API.

Jika ingin menentukan kolom yang akan ditampilkan dalam respons, Anda dapat menyetel parameter sistem fields dengan metode apa pun dari resource drives. Jika Anda tidak menentukan parameter fields, server akan menampilkan kumpulan kolom default khusus untuk metode tersebut. Misalnya, metode list hanya menampilkan kolom kind, id, dan name untuk setiap drive bersama. Untuk mengetahui informasi selengkapnya, lihat Menampilkan kolom tertentu.

Untuk mempelajari lebih lanjut batas folder drive bersama, lihat Batas folder drive bersama.

Membuat drive bersama

Untuk membuat drive bersama, gunakan metode create pada resource drives dengan parameter requestId.

Parameter requestId mengidentifikasi upaya logis untuk pembuatan drive bersama yang bersifat idempoten. Jika permintaan kehabisan waktu atau menampilkan error backend yang tidak dapat ditentukan, permintaan yang sama dapat diulang dan tidak akan membuat duplikat. requestId dan isi permintaan harus tetap sama.

Contoh kode berikut menunjukkan cara membuat drive bersama:

Java

drive/snippets/drive_v3/src/main/java/CreateDrive.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
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.DriveScopes;
import com.google.api.services.drive.model.Drive;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.UUID;

/* class to demonstrate use-case of Drive's create drive. */
public class CreateDrive {

  /**
   * Create a drive.
   *
   * @return Newly created drive id.
   * @throws IOException if service account credentials file not found.
   */
  public static String createDrive() 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.*/
    GoogleCredentials credentials =
        GoogleCredentials.getApplicationDefault().createScoped(Arrays.asList(DriveScopes.DRIVE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

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

    Drive driveMetadata = new Drive();
    driveMetadata.setName("Project Resources");
    String requestId = UUID.randomUUID().toString();
    try {
      Drive drive = service.drives().create(requestId,
              driveMetadata)
          .execute();
      System.out.println("Drive ID: " + drive.getId());

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

Python

drive/snippets/drive-v3/drive_snippet/create_drive.py
import uuid

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def create_drive():
  """Create a drive.
  Returns:
      Id of the created drive

  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)

    drive_metadata = {"name": "Project Resources"}
    request_id = str(uuid.uuid4())
    # pylint: disable=maybe-no-member
    drive = (
        service.drives()
        .create(body=drive_metadata, requestId=request_id, fields="id")
        .execute()
    )
    print(f'Drive ID: {drive.get("id")}')

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

  return drive.get("id")


if __name__ == "__main__":
  create_drive()

Node.js

drive/snippets/drive_v3/drive_snippets/create_drive.js
/**
 * Create a drive.
 * */
async function createDrive() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');
  const uuid = require('uuid');

  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});

  const driveMetadata = {
    name: 'Project resources',
  };
  const requestId = uuid.v4();
  try {
    const Drive = await service.drives.create({
      resource: driveMetadata,
      requestId: requestId,
      fields: 'id',
    });
    console.log('Drive Id:', Drive.data.id);
    return Drive.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveCreateDrive.php
<?php
use Google\Client;
use Google\Service\Drive;
use Ramsey\Uuid\Uuid;
function createDrive()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);

        $driveMetadata = new Drive\Drive(array(
                'name' => 'Project Resources'));
        $requestId = Uuid::uuid4()->toString();
        $drive = $driveService->drives->create($requestId, $driveMetadata, array(
                'fields' => 'id'));
        printf("Drive ID: %s\n", $drive->id);
        return $drive->id;
    } catch(Exception $e)  {
        echo "Error Message: ".$e;
    }  

}

.NET

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

namespace DriveV3Snippets
{
    // Class to demonstrate use of Drive's create drive.
    public class CreateDrive
    {
        /// <summary>
        /// Create a drive.
        /// </summary>
        /// <returns>newly created drive Id.</returns>
        public static string DriveCreateDrive()
        {
            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 driveMetadata = new Drive()
                {
                    Name = "Project Resources"
                };
                var requestId = Guid.NewGuid().ToString();
                var request = service.Drives.Create(driveMetadata, requestId);
                request.Fields = "id";
                var drive = request.Execute();
                Console.WriteLine("Drive ID: " + drive.Id);
                return drive.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Panggilan ke metode create bersifat idempoten.

Jika drive bersama berhasil dibuat pada permintaan sebelumnya atau karena percobaan ulang, metode ini akan menampilkan instance resource drives. Terkadang, seperti setelah jangka waktu yang lama atau jika isi permintaan telah berubah, error 409 dapat ditampilkan yang menunjukkan bahwa requestId harus dibatalkan.

Mendapatkan akses ke drive bersama

Untuk mendapatkan metadata untuk drive bersama, gunakan metode get pada resource drives dengan parameter jalur driveId. Jika Anda tidak mengetahui ID drive, Anda dapat mencantumkan semua drive bersama menggunakan metode list.

Metode get menampilkan drive bersama sebagai instance resource drives.

Untuk mengirim permintaan sebagai administrator domain, tetapkan parameter kueri useDomainAdminAccess ke true. Untuk mengetahui informasi selengkapnya, lihat Mengelola drive bersama sebagai administrator domain.

Mencantumkan drive bersama

Untuk mencantumkan drive bersama pengguna, gunakan metode list pada resource drives. Metode ini menampilkan daftar drive bersama.

Teruskan parameter kueri berikut untuk menyesuaikan penomoran halaman, atau untuk memfilter, drive bersama:

  • pageSize: Jumlah maksimum drive bersama yang akan ditampilkan per halaman.

  • pageToken: Token halaman, diterima dari panggilan daftar sebelumnya. Berikan token ini untuk mengambil halaman berikutnya.

  • q: String kueri untuk menelusuri shared drive. Untuk mengetahui informasi selengkapnya, lihat Menelusuri drive bersama.

  • useDomainAdminAccess: Setel ke true untuk mengirim permintaan sebagai administrator domain guna menampilkan semua drive bersama dari domain tempat pemohon menjadi administrator. Untuk mengetahui informasi selengkapnya, lihat Mengelola drive bersama sebagai administrator domain.

Memperbarui drive bersama

Untuk memperbarui metadata drive bersama, gunakan metode update pada resource drives dengan parameter jalur driveId.

Metode ini menampilkan drive bersama sebagai instance resource drives.

Untuk mengirim permintaan sebagai administrator domain, tetapkan parameter kueri useDomainAdminAccess ke true. Untuk mengetahui informasi selengkapnya, lihat Mengelola drive bersama sebagai administrator domain.

Menyembunyikan dan memperlihatkan drive bersama

Untuk menyembunyikan drive bersama dari tampilan default, gunakan metode hide pada resource drives dengan parameter driveId.

Jika drive bersama disembunyikan, Drive akan menandai resource drive bersama sebagai hidden=true. Drive bersama yang tersembunyi tidak akan muncul di UI Drive atau dalam daftar file yang dikembalikan.

Untuk memulihkan tampilan default drive bersama, gunakan metode unhide pada resource drives dengan parameter driveId.

Kedua metode ini menampilkan drive bersama sebagai instance resource drives.

Menghapus drive bersama

Untuk menghapus drive bersama secara permanen, gunakan metode delete pada resource drives dengan parameter driveId.

Sebelum menghapus drive bersama, semua konten di drive bersama harus dipindahkan ke sampah atau dihapus. Pengguna juga harus memiliki role=organizer di folder drive bersama. Untuk mengetahui informasi selengkapnya, lihat Memindahkan file dan folder ke Sampah atau menghapusnya.

Teruskan parameter kueri berikut untuk memfilter drive bersama:

  • useDomainAdminAccess: Setel ke true untuk mengirim permintaan sebagai administrator domain guna menampilkan semua drive bersama dari domain tempat pemohon menjadi administrator. Untuk mengetahui informasi selengkapnya, lihat Mengelola drive bersama sebagai administrator domain.

  • allowItemDeletion: Setel ke true untuk menghapus item dalam drive bersama. Hanya didukung jika useDomainAdminAccess juga disetel ke true.

Menambahkan atau menghapus anggota drive bersama

Tambahkan atau hapus anggota drive bersama menggunakan resource permissions.

Untuk menambahkan anggota, buat izin di drive bersama. Metode izin juga dapat digunakan pada setiap file dalam drive bersama untuk memberikan hak istimewa tambahan kepada anggota atau mengizinkan pengguna yang bukan anggota berkolaborasi pada item tertentu.

Untuk mengetahui informasi selengkapnya dan kode contoh, lihat Membagikan file, folder, dan drive.

Mengelola drive bersama sebagai administrator domain

Terapkan parameter useDomainAdminAccess dengan resource drives dan permissions untuk mengelola drive bersama di seluruh organisasi.

Pengguna yang memanggil metode ini dengan useDomainAdminAccess=true harus memiliki hak istimewa administrator Drive and Docs. Administrator dapat menelusuri drive bersama atau memperbarui izin untuk drive bersama yang dimiliki oleh organisasi mereka, terlepas dari keanggotaan administrator di drive bersama tertentu.

Saat menggunakan akun layanan, Anda mungkin harus meniru identitas administrator yang diautentikasi menggunakan peniruan identitas akun layanan. Perhatikan bahwa akun layanan tidak termasuk dalam domain Google Workspace Anda, tidak seperti akun pengguna. Jika Anda membagikan aset Google Workspace, seperti dokumen atau acara, kepada seluruh domain Google Workspace Anda, aset tersebut tidak akan dibagikan kepada akun layanan. Untuk mengetahui informasi selengkapnya, lihat Ringkasan akun layanan.

Memulihkan drive bersama yang tidak memiliki penyelenggara

Contoh kode berikut menunjukkan cara memulihkan drive bersama yang tidak lagi memiliki penyelenggara.

Java

drive/snippets/drive_v3/src/main/java/RecoverDrive.java
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.DriveScopes;
import com.google.api.services.drive.model.Drive;
import com.google.api.services.drive.model.DriveList;
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 Drive's shared drive without an organizer. */
public class RecoverDrive {

  /**
   * Find all shared drives without an organizer and add one.
   *
   * @param realUser User's email id.
   * @return All shared drives without an organizer.
   * @throws IOException if shared drive not found.
   */
  public static List<Drive> recoverDrives(String realUser)
      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.*/
    GoogleCredentials credentials =
        GoogleCredentials.getApplicationDefault().createScoped(Arrays.asList(DriveScopes.DRIVE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    com.google.api.services.drive.Drive service =
        new com.google.api.services.drive.Drive.Builder(new NetHttpTransport(),
            GsonFactory.getDefaultInstance(),
            requestInitializer)
            .setApplicationName("Drive samples")
            .build();
    List<Drive> drives = new ArrayList<Drive>();

    // Find all shared drives without an organizer and add one.
    // Note: This example does not capture all cases. Shared drives
    // that have an empty group as the sole organizer, or an
    // organizer outside the organization are not captured. A
    // more exhaustive approach would evaluate each shared drive
    // and the associated permissions and groups to ensure an active
    // organizer is assigned.
    String pageToken = null;
    Permission newOrganizerPermission = new Permission()
        .setType("user")
        .setRole("organizer");

    newOrganizerPermission.setEmailAddress(realUser);


    do {
      DriveList result = service.drives().list()
          .setQ("organizerCount = 0")
          .setFields("nextPageToken, drives(id, name)")
          .setUseDomainAdminAccess(true)
          .setPageToken(pageToken)
          .execute();
      for (Drive drive : result.getDrives()) {
        System.out.printf("Found drive without organizer: %s (%s)\n",
            drive.getName(), drive.getId());
        // Note: For improved efficiency, consider batching
        // permission insert requests
        Permission permissionResult = service.permissions()
            .create(drive.getId(), newOrganizerPermission)
            .setUseDomainAdminAccess(true)
            .setSupportsAllDrives(true)
            .setFields("id")
            .execute();
        System.out.printf("Added organizer permission: %s\n",
            permissionResult.getId());

      }

      drives.addAll(result.getDrives());

      pageToken = result.getNextPageToken();
    } while (pageToken != null);

    return drives;
  }
}

Python

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


def recover_drives(real_user):
  """Find all shared drives without an organizer and add one.
  Args:
      real_user:User ID for the new organizer.
  Returns:
      drives object

  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)

    drives = []

    # pylint: disable=maybe-no-member
    page_token = None
    new_organizer_permission = {
        "type": "user",
        "role": "organizer",
        "emailAddress": "user@example.com",
    }
    new_organizer_permission["emailAddress"] = real_user

    while True:
      response = (
          service.drives()
          .list(
              q="organizerCount = 0",
              fields="nextPageToken, drives(id, name)",
              useDomainAdminAccess=True,
              pageToken=page_token,
          )
          .execute()
      )
      for drive in response.get("drives", []):
        print(
            "Found shared drive without organizer: "
            f"{drive.get('title')}, {drive.get('id')}"
        )
        permission = (
            service.permissions()
            .create(
                fileId=drive.get("id"),
                body=new_organizer_permission,
                useDomainAdminAccess=True,
                supportsAllDrives=True,
                fields="id",
            )
            .execute()
        )
        print(f'Added organizer permission: {permission.get("id")}')

      drives.extend(response.get("drives", []))
      page_token = response.get("nextPageToken", None)
      if page_token is None:
        break

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

  return drives


if __name__ == "__main__":
  recover_drives(real_user="gduser1@workspacesamples.dev")

Node.js

drive/snippets/drive_v3/drive_snippets/recover_drives.js
/**
 * Find all shared drives without an organizer and add one.
 * @param{string} userEmail user ID to assign ownership to
 * */
async function recoverDrives(userEmail) {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const drives = [];
  const newOrganizerPermission = {
    type: 'user',
    role: 'organizer',
    emailAddress: userEmail, // Example: 'user@example.com'
  };

  let pageToken = null;
  try {
    const res = await service.drives.list({
      q: 'organizerCount = 0',
      fields: 'nextPageToken, drives(id, name)',
      useDomainAdminAccess: true,
      pageToken: pageToken,
    });
    Array.prototype.push.apply(drives, res.data.items);
    for (const drive of res.data.drives) {
      console.log(
          'Found shared drive without organizer:',
          drive.name,
          drive.id,
      );
      await service.permissions.create({
        resource: newOrganizerPermission,
        fileId: drive.id,
        useDomainAdminAccess: true,
        supportsAllDrives: true,
        fields: 'id',
      });
    }
    pageToken = res.nextPageToken;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
  return drives;
}

PHP

drive/snippets/drive_v3/src/DriveRecoverDrives.php
<?php
use Google\Client;
use Google\Service\Drive;
use Ramsey\Uuid\Uuid;
function recoverDrives()
{
   try {
    $client = new Client();
    $client->useApplicationDefaultCredentials();
    $client->addScope(Drive::DRIVE);
    $driveService = new Drive($client);

    $realUser = readline("Enter user email address: ");

    $drives = array();
    // Find all shared drives without an organizer and add one.
    // Note: This example does not capture all cases. Shared drives
    // that have an empty group as the sole organizer, or an
    // organizer outside the organization are not captured. A
    // more exhaustive approach would evaluate each shared drive
    // and the associated permissions and groups to ensure an active
    // organizer is assigned.
    $pageToken = null;
    $newOrganizerPermission = new Drive\Permission(array(
        'type' => 'user',
        'role' => 'organizer',
        'emailAddress' => 'user@example.com'
    ));
    $newOrganizerPermission['emailAddress'] = $realUser;
    do {
        $response = $driveService->drives->listDrives(array(
            'q' => 'organizerCount = 0',
            'fields' => 'nextPageToken, drives(id, name)',
            'useDomainAdminAccess' => true,
            'pageToken' => $pageToken
        ));
        foreach ($response->drives as $drive) {
            printf("Found shared drive without organizer: %s (%s)\n",
                $drive->name, $drive->id);
            $permission = $driveService->permissions->create($drive->id,
                $newOrganizerPermission,
                array(
                    'fields' => 'id',
                    'useDomainAdminAccess' => true,
                    'supportsAllDrives' => true
                ));
            printf("Added organizer permission: %s\n", $permission->id);
        }
        array_push($drives, $response->drives);
        $pageToken = $response->pageToken;
    } while ($pageToken != null);
    return $drives;
   } catch(Exception $e) {
      echo "Error Message: ".$e;
   }
}

.NET

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

namespace DriveV3Snippets
{
    // Class to demonstrate use-case of Drive's shared drive without an organizer.
    public class RecoverDrives
    {
        /// <summary>
        /// Find all shared drives without an organizer and add one.
        /// </summary>
        /// <param name="realUser">User ID for the new organizer.</param>
        /// <returns>all shared drives without an organizer.</returns>
        public static IList<Drive> DriveRecoverDrives(string realUser)
        {
            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 drives = new List<Drive>();
                // Find all shared drives without an organizer and add one.
                // Note: This example does not capture all cases. Shared drives
                // that have an empty group as the sole organizer, or an
                // organizer outside the organization are not captured. A
                // more exhaustive approach would evaluate each shared drive
                // and the associated permissions and groups to ensure an active
                // organizer is assigned.
                string pageToken = null;
                var newOrganizerPermission = new Permission()
                {
                    Type = "user",
                    Role = "organizer",
                    EmailAddress = realUser
                };

                do
                {
                    var request = service.Drives.List();
                    request.UseDomainAdminAccess = true;
                    request.Q = "organizerCount = 0";
                    request.Fields = "nextPageToken, drives(id, name)";
                    request.PageToken = pageToken;
                    var result = request.Execute();
                    foreach (var drive in result.Drives)
                    {
                        Console.WriteLine(("Found abandoned shared drive: {0} ({1})",
                            drive.Name, drive.Id));
                        // Note: For improved efficiency, consider batching
                        // permission insert requests
                        var permissionRequest = service.Permissions.Create(
                            newOrganizerPermission,
                            drive.Id
                        );
                        permissionRequest.UseDomainAdminAccess = true;
                        permissionRequest.SupportsAllDrives = true;
                        permissionRequest.Fields = "id";
                        var permissionResult = permissionRequest.Execute();
                        Console.WriteLine("Added organizer permission: {0}", permissionResult.Id);
                    }

                    pageToken = result.NextPageToken;
                } while (pageToken != null);

                return drives;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

Mencegah pengguna mendownload, mencetak, atau menyalin file Anda

Anda dapat membatasi cara pengguna mendownload, mencetak, dan menyalin file dalam drive bersama.

Untuk menentukan apakah pengguna dapat mengubah batasan download yang diterapkan penyelenggara pada drive bersama, periksa kolom boolean capabilities.canChangeDownloadRestriction. Jika capabilities.canChangeDownloadRestriction disetel ke true, pembatasan download dapat diterapkan ke drive bersama. Untuk mengetahui informasi selengkapnya, lihat Memahami kemampuan file.

Resource drives berisi kumpulan kolom restrictions boolean yang digunakan untuk menunjukkan apakah tindakan dapat dilakukan di drive bersama. Pembatasan berlaku untuk drive bersama atau item di dalam drive bersama. Batasan dapat ditetapkan menggunakan metode drives.update.

Untuk menerapkan pembatasan download ke drive bersama, pengelola drive bersama dapat menyetel kolom restrictions.downloadRestriction resource drives menggunakan objek DownloadRestriction. Menetapkan kolom boolean restrictedForReaders ke true menyatakan bahwa download dan penyalinan dibatasi untuk pembaca. Menetapkan kolom boolean restrictedForWriters ke true menyatakan bahwa download dan penyalinan dibatasi untuk penulis. Perhatikan bahwa jika kolom restrictedForWriters adalah true, download dan penyalinan juga dibatasi untuk pembaca. Demikian pula, menyetel restrictedForWriters ke true dan restrictedForReaders ke false sama dengan menyetel restrictedForWriters dan restrictedForReaders ke true.

Kompatibilitas mundur

Dengan diperkenalkannya objek DownloadRestriction, fungsi kolom boolean restrictions.copyRequiresWriterPermission telah diperbarui.

Sekarang, menyetel restrictions.copyRequiresWriterPermission ke true akan memperbarui kolom boolean restrictedForReaders dari objek DownloadRestriction ke true untuk menyatakan bahwa download dan penyalinan dibatasi untuk pembaca.

Menetapkan kolom copyRequiresWriterPermission ke false akan memperbarui kolom restrictedForWriters dan restrictedForReaders ke false. Artinya, setelan pembatasan download atau penyalinan dihapus untuk semua pengguna.

Kolom yang mengontrol fitur download, cetak, dan salin

Tabel berikut mencantumkan kolom resource drives yang memengaruhi fungsi download, cetak, dan salin:

Kolom Deskripsi Versi
capabilities.canCopy Apakah pengguna saat ini dapat menyalin file di drive bersama. v2 & v3
capabilities.canDownload Apakah pengguna saat ini dapat mendownload file di drive bersama. v2 & v3
capabilities.canChangeCopyRequiresWriterPermission Apakah pengguna saat ini dapat mengubah copyRequiresWriterPermission pembatasan drive bersama. v2 & v3
capabilities.canResetDriveRestrictions Apakah pengguna saat ini dapat mereset pembatasan drive bersama ke setelan default. v2 & v3
capabilities.canChangeDownloadRestriction Apakah pengguna saat ini dapat mengubah pembatasan download drive bersama. Khusus v3
restrictions.copyRequiresWriterPermission Apakah opsi untuk menyalin, mencetak, atau mendownload file di dalam drive bersama dinonaktifkan untuk pembaca dan pengomentar. Saat true, kolom dengan nama serupa akan disetel ke true untuk file apa pun di dalam drive bersama ini. v2 & v3
restrictions.downloadRestriction Pembatasan download yang diterapkan oleh pengelola drive bersama. Khusus v3

Batas folder

Folder drive bersama memiliki beberapa batas penyimpanan. Untuk mengetahui informasinya, lihat Batas drive bersama di Google Drive.

Batas item

Setiap drive bersama pengguna dibatasi menampung 500.000 item, termasuk file, folder, dan pintasan.

Saat batas tercapai, drive bersama tidak dapat lagi menerima item. Untuk melanjutkan menerima file, pengguna harus menghapus item secara permanen dari drive bersama. Perhatikan bahwa item dalam sampah dihitung dalam batas, tetapi item yang dihapus secara permanen tidak. Untuk mengetahui informasi selengkapnya, lihat Memindahkan file dan folder ke Sampah atau menghapusnya.

Batas kedalaman folder

Folder di drive bersama tidak boleh berisi lebih dari 100 tingkat folder bertingkat. Artinya, folder turunan tidak dapat disimpan di bawah folder yang memiliki kedalaman lebih dari 99 tingkat. Batasan ini hanya berlaku untuk folder turunan.

Upaya untuk menambahkan lebih dari 100 tingkat folder akan menampilkan respons kode status HTTP teamDriveHierarchyTooDeep.