Gestisci Drive condivisi

Questa guida contiene attività relative alla gestione dei Drive condivisi, come la creazione di Drive condivisi e la gestione di membri e autorizzazioni, utilizzando l'API Google Drive.

Se vuoi specificare i campi da restituire nella risposta, puoi impostare il fields parametro di sistema con qualsiasi metodo della risorsa drives. Se non specifichi il parametro fields, il server restituisce un insieme predefinito di campi specifici per il metodo. Ad esempio, il metodo list restituisce solo i campi kind, id e name per ogni Drive condiviso. Per saperne di più, consulta Restituire campi specifici.

Per scoprire di più sui limiti delle cartelle dei Drive condivisi, vedi Limiti delle cartelle dei Drive condivisi.

Creare un Drive condiviso

Per creare un Drive condiviso, utilizza il metodo create sulla risorsa drives con il parametro requestId.

Il parametro requestId identifica il tentativo logico di creazione idempotente di un Drive condiviso. Se la richiesta scade o restituisce un errore di backend indeterminato, la stessa richiesta può essere ripetuta e non creerà duplicati. requestId e corpo della richiesta devono rimanere invariati.

Il seguente esempio di codice mostra come creare un Drive condiviso:

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

Le chiamate al metodo create sono idempotenti.

Se il Drive condiviso è stato creato correttamente in una richiesta precedente o a causa di un nuovo tentativo, il metodo restituisce un'istanza della risorsa drives. A volte, ad esempio dopo un periodo di tempo prolungato o se il corpo della richiesta è cambiato, potrebbe essere restituito un errore 409 che indica che il requestId deve essere eliminato.

Ottenere un Drive condiviso

Per ottenere i metadati di un Drive condiviso, utilizza il metodo get sulla risorsa drives con il parametro di percorso driveId. Se non conosci l'ID del drive, puoi elencare tutti i Drive condivisi utilizzando il metodo list.

Il metodo get restituisce un Drive condiviso come istanza di una risorsa drives.

Per inviare la richiesta come amministratore di dominio, imposta il parametro di query useDomainAdminAccess su true. Per saperne di più, vedi Gestire i Drive condivisi come amministratori di dominio.

Elencare i Drive condivisi

Per elencare i Drive condivisi di un utente, utilizza il metodo list nella risorsa drives. Il metodo restituisce un elenco di Drive condivisi.

Trasmetti i seguenti parametri di query per personalizzare la paginazione o filtrare i Drive condivisi:

  • pageSize: Il numero massimo di drive condivisi da restituire per pagina.

  • pageToken: un token di pagina ricevuto da una precedente chiamata dell'elenco. Fornisci questo token per recuperare la pagina successiva.

  • q: stringa di query per la ricerca nei Drive condivisi. Per saperne di più, vedi Cercare i Drive condivisi.

  • useDomainAdminAccess: impostalo su true per inviare la richiesta come amministratore di dominio e restituire tutti i Drive condivisi del dominio in cui il richiedente è un amministratore. Per maggiori informazioni, vedi Gestire i Drive condivisi come amministratori di dominio.

Aggiornare un Drive condiviso

Per aggiornare i metadati di un Drive condiviso, utilizza il metodo update sulla risorsa drives con il parametro del percorso driveId.

Il metodo restituisce un Drive condiviso come istanza di una risorsa drives.

Per inviare la richiesta come amministratore di dominio, imposta il parametro di query useDomainAdminAccess su true. Per saperne di più, vedi Gestire i Drive condivisi come amministratori di dominio.

Nascondere e mostrare un Drive condiviso

Per nascondere un Drive condiviso dalla visualizzazione predefinita, utilizza il metodo hide sulla risorsa drives con il parametro driveId.

Quando un Drive condiviso è nascosto, Drive contrassegna la risorsa del Drive condiviso come hidden=true. I Drive condivisi nascosti non vengono visualizzati nell'interfaccia utente di Drive o nell'elenco dei file restituiti.

Per ripristinare la visualizzazione predefinita di un Drive condiviso, utilizza il metodo unhide sulla risorsa drives con il parametro driveId.

Entrambi i metodi restituiscono un Drive condiviso come istanza di una risorsa drives.

Eliminare un Drive condiviso

Per eliminare definitivamente un Drive condiviso, utilizza il metodo delete sulla risorsa drives con il parametro driveId.

Prima di eliminare un Drive condiviso, tutti i contenuti devono essere spostati nel cestino o eliminati. L'utente deve disporre anche dell'autorizzazione role=organizer per la cartella del Drive condiviso. Per ulteriori informazioni, vedi Spostare nel cestino o eliminare file e cartelle.

Passa i seguenti parametri di query per filtrare i Drive condivisi:

  • useDomainAdminAccess: impostalo su true per inviare la richiesta come amministratore di dominio e restituire tutti i Drive condivisi del dominio in cui il richiedente è un amministratore. Per maggiori informazioni, vedi Gestire i Drive condivisi come amministratori di dominio.

  • allowItemDeletion: impostalo su true per eliminare gli elementi all'interno del Drive condiviso. Supportato solo quando useDomainAdminAccess è impostato anche su true.

Aggiungere o rimuovere membri del Drive condiviso

Aggiungi o rimuovi membri del Drive condiviso utilizzando la risorsa permissions.

Per aggiungere un membro, crea l'autorizzazione sul Drive condiviso. I metodi di autorizzazione possono essere utilizzati anche per singoli file all'interno di un Drive condiviso per concedere ai membri privilegi aggiuntivi o consentire ai non membri di collaborare a elementi specifici.

Per ulteriori informazioni e codice di esempio, vedi Condividere file, cartelle e unità.

Gestire i Drive condivisi come amministratori di dominio

Applica il parametro useDomainAdminAccess con le risorse drives e permissions per gestire i Drive condivisi in un'organizzazione.

Gli utenti che chiamano questi metodi con useDomainAdminAccess=true devono disporre del Drive and Docs privilegio di amministratore. Gli amministratori possono cercare i Drive condivisi o aggiornare le autorizzazioni per i Drive condivisi di proprietà della loro organizzazione, indipendentemente dall'appartenenza dell'amministratore a un determinato Drive condiviso.

Quando utilizzi i service account, potresti dover rappresentare un amministratore autenticato utilizzando la rappresentazione del service account. Tieni presente che i service account non appartengono al tuo dominio Google Workspace, a differenza degli account utente. Se condividi asset di Google Workspace, come documenti o eventi, con l'intero dominio Google Workspace, questi non vengono condivisi con gli account di servizio. Per ulteriori informazioni, consulta la panoramica dei service account.

Recuperare un Drive condiviso senza organizzatore

Il seguente esempio di codice mostra come recuperare i drive condivisi che non hanno più un organizzatore.

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

Impedire agli utenti di scaricare, stampare o copiare un file

Puoi limitare il modo in cui gli utenti possono scaricare, stampare e copiare i file all'interno dei Drive condivisi.

Per determinare se l'utente può modificare le limitazioni di download applicate dall'organizzatore di un Drive condiviso, controlla il campo booleano capabilities.canChangeDownloadRestriction. Se capabilities.canChangeDownloadRestriction è impostato su true, è possibile applicare restrizioni di download al Drive condiviso. Per saperne di più, vedi Informazioni sulle funzionalità dei file.

La risorsa drives contiene una raccolta di campi booleani restrictions utilizzati per indicare se un'azione può essere eseguita su un Drive condiviso. Le limitazioni si applicano a un Drive condiviso o agli elementi al suo interno. I limiti possono essere impostati utilizzando il metodo drives.update.

Per applicare le limitazioni al download a un Drive condiviso, un gestore del Drive condiviso può impostare il campo restrictions.downloadRestriction della risorsa drives utilizzando l'oggetto DownloadRestriction. Se imposti il campo booleano restrictedForReaders su true, dichiari che sia il download che la copia sono limitati per i lettori. Se imposti il campo booleano restrictedForWriters su true, dichiari che sia il download che la copia sono limitati per gli autori. Tieni presente che se il campo restrictedForWriters è true, anche il download e la copia sono limitati per i lettori. Analogamente, impostare restrictedForWriters su true e restrictedForReaders su false equivale a impostare sia restrictedForWriters che restrictedForReaders su true.

Compatibilità con le versioni precedenti

Con l'introduzione dell'oggetto DownloadRestriction, la funzionalità del campo booleano restrictions.copyRequiresWriterPermission è stata aggiornata.

Ora, l'impostazione di restrictions.copyRequiresWriterPermission su true aggiorna il campo booleano restrictedForReaders dell'oggetto DownloadRestriction su true per dichiarare che il download e la copia sono limitati per i lettori.

Se imposti il campo copyRequiresWriterPermission su false, vengono aggiornati sia i campi restrictedForWriters che restrictedForReaders su false. Ciò significa che le impostazioni di limitazione del download o della copia vengono rimosse per tutti gli utenti.

Campi che controllano le funzionalità di download, stampa e copia

La tabella seguente elenca i campi delle risorse drives che influiscono sulle funzionalità di download, stampa e copia:

Campo Descrizione Versione
capabilities.canCopy Indica se l'utente attuale può copiare i file in un Drive condiviso. v2 e v3
capabilities.canDownload Indica se l'utente attuale può scaricare i file in un Drive condiviso. v2 e v3
capabilities.canChangeCopyRequiresWriterPermission Indica se l'utente corrente può modificare la limitazione copyRequiresWriterPermission di un Drive condiviso. v2 e v3
capabilities.canResetDriveRestrictions Indica se l'utente attuale può reimpostare le limitazioni del Drive condiviso sui valori predefiniti. v2 e v3
capabilities.canChangeDownloadRestriction Indica se l'utente corrente può modificare la limitazione dei download di un Drive condiviso. Solo v3
restrictions.copyRequiresWriterPermission Se le opzioni per copiare, stampare o scaricare i file all'interno di un Drive condiviso sono disattivate per lettori e commentatori. Quando true, il campo con nome simile viene impostato su true per qualsiasi file all'interno di questo Drive condiviso. v2 e v3
restrictions.downloadRestriction Le limitazioni al download applicate dai gestori del Drive condiviso. Solo v3

Limiti per le cartelle

Le cartelle dei Drive condivisi hanno alcuni limiti di spazio di archiviazione. Per informazioni, vedi Limiti relativi ai Drive condivisi su Google Drive.

Limite massimo di elementi

Il Drive condiviso di ogni utente può contenere massimo 500.000 elementi, compresi file, cartelle e scorciatoie.

Una volta raggiunto il limite, il Drive condiviso non può più accettare elementi. Per riprendere a ricevere file, gli utenti devono eliminare definitivamente gli elementi dal Drive condiviso. Tieni presente che gli elementi nel cestino vengono conteggiati ai fini del limite, ma quelli eliminati definitivamente no. Per saperne di più, vedi Spostare nel cestino o eliminare file e cartelle.

Limite di profondità delle cartelle

Una cartella di un Drive condiviso non può contenere più di 100 livelli di cartelle nidificate. Ciò significa che una cartella secondaria non può essere archiviata in una cartella con più di 99 livelli di profondità. Questa limitazione si applica solo alle cartelle secondarie.

I tentativi di aggiungere più di 100 livelli di cartelle restituiscono un codice di stato HTTP teamDriveHierarchyTooDeep.