Ortak Drive'ları yönetme

Bu kılavuzda, Google Drive API'yi kullanarak ortak Drive oluşturma, üyeleri ve izinleri yönetme gibi ortak Drive'ları yönetmeyle ilgili görevler yer almaktadır.

Yanıtla döndürülecek alanları belirtmek istiyorsanız drives kaynağının herhangi bir yöntemiyle fields system parametresini ayarlayabilirsiniz. fields parametresini belirtmezseniz sunucu, yönteme özel varsayılan bir alan grubu döndürür. Örneğin, list yöntemi her ortak Drive için yalnızca kind, id ve name alanlarını döndürür. Daha fazla bilgi için Belirli alanları döndürme başlıklı makaleye bakın.

Ortak Drive klasör sınırları hakkında daha fazla bilgi edinmek için Ortak Drive klasör sınırları başlıklı makaleyi inceleyin.

Ortak Drive oluşturma

Ortak Drive oluşturmak için create yöntemini drives kaynağında requestId parametresiyle birlikte kullanın.

requestId parametresi, ortak Drive'ın idempotent oluşturulması için mantıksal girişimi tanımlar. İstek zaman aşımına uğrarsa veya belirsiz bir arka uç hatası döndürürse aynı istek tekrar gönderilebilir ve bu durumda kopya oluşturulmaz. İsteğin requestId ve gövdesi aynı kalmalıdır.

Aşağıdaki kod örneğinde, ortak drive'ın nasıl oluşturulacağı gösterilmektedir:

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

create yöntemine yapılan çağrılar idempotent'tır.

Ortak Drive, önceki bir istekte veya yeniden deneme nedeniyle başarıyla oluşturulduysa yöntem, drives kaynağının bir örneğini döndürür. Bazen, uzun bir süre sonra veya isteğin gövdesi değiştiyse 409 hata döndürülerek requestId öğesinin atılması gerektiği belirtilebilir.

Ortak Drive edinme

Bir ortak Drive'ın meta verilerini almak için driveId yol parametresiyle birlikte drives kaynağında get yöntemini kullanın. Drive kimliğini bilmiyorsanız list yöntemini kullanarak tüm ortak Drive'ları listeleyebilirsiniz.

get yöntemi, ortak drive'ı drives kaynağının bir örneği olarak döndürür.

İsteği alan yöneticisi olarak yayınlamak için useDomainAdminAccess sorgu parametresini true olarak ayarlayın. Daha fazla bilgi için Ortak Drive'ları alan yöneticisi olarak yönetme başlıklı makaleyi inceleyin.

Ortak Drive'ları listeleme

Bir kullanıcının paylaşılan sürücülerini listelemek için drives kaynağında list yöntemini kullanın. Bu yöntem, ortak drive'ların listesini döndürür.

Ortak drive'ların sayfalara ayrılmasını özelleştirmek veya ortak drive'ları filtrelemek için aşağıdaki sorgu parametrelerini iletin:

  • pageSize: Sayfa başına döndürülecek maksimum ortak sürücü sayısı.

  • pageToken: Önceki bir liste çağrısından alınan sayfa jetonu. Sonraki sayfayı almak için bu jetonu sağlayın.

  • q: Ortak drive'larda arama yapmak için kullanılan sorgu dizesi. Daha fazla bilgi için Ortak Drive'ları arama başlıklı makaleyi inceleyin.

  • useDomainAdminAccess: İsteği, alan yöneticisi olarak yayınlamak ve isteyenin yönetici olduğu alandaki tüm ortak sürücüleri döndürmek için true olarak ayarlayın. Daha fazla bilgi için Ortak Drive'ları alan yöneticisi olarak yönetme başlıklı makaleyi inceleyin.

Ortak Drive'ı güncelleme

Bir ortak Drive'ın meta verilerini güncellemek için driveId yol parametresiyle birlikte update yöntemini drives kaynağında kullanın.

Bu yöntem, ortak drive'ı drives kaynağının bir örneği olarak döndürür.

İsteği alan yöneticisi olarak yayınlamak için useDomainAdminAccess sorgu parametresini true olarak ayarlayın. Daha fazla bilgi için Ortak Drive'ları alan yöneticisi olarak yönetme başlıklı makaleyi inceleyin.

Ortak Drive'ı gizleme ve gösterme

Bir ortak drive'ı varsayılan görünümden gizlemek için driveId parametresiyle drives kaynağında hide yöntemini kullanın.

Bir ortak drive gizlendiğinde Drive, ortak drive kaynağını hidden=true olarak işaretler. Gizli ortak drive'lar, Drive kullanıcı arayüzünde veya döndürülen dosyaların listesinde görünmez.

Bir ortak Drive'ı varsayılan görünüme geri yüklemek için driveId parametresini içeren drives kaynağında unhide yöntemini kullanın.

Her iki yöntem de ortak drive'ı drives kaynağının bir örneği olarak döndürür.

Ortak Drive'ı silme

Bir ortak Drive'ı kalıcı olarak silmek için driveId parametresiyle birlikte drives kaynağında delete yöntemini kullanın.

Ortak Drive'ı silmeden önce içindeki tüm içeriklerin çöp kutusuna taşınması veya silinmesi gerekir. Kullanıcının, paylaşılan Drive klasöründe role=organizer izni de olmalıdır. Daha fazla bilgi için Dosyaları ve klasörleri çöp kutusuna taşıma veya silme başlıklı makaleyi inceleyin.

Ortak drive'ları filtrelemek için aşağıdaki sorgu parametrelerini iletin:

  • useDomainAdminAccess: İsteği, alan yöneticisi olarak yayınlamak ve isteyenin yönetici olduğu alandaki tüm ortak sürücüleri döndürmek için true olarak ayarlayın. Daha fazla bilgi için Ortak Drive'ları alan yöneticisi olarak yönetme başlıklı makaleyi inceleyin.

  • allowItemDeletion: Ortak Drive'daki öğeleri silmek için true olarak ayarlayın. Yalnızca useDomainAdminAccess da true olarak ayarlandığında desteklenir.

Ortak Drive üyelerini ekleme veya kaldırma

permissions kaynağını kullanarak ortak Drive üyelerini ekleyin veya kaldırın.

Üye eklemek için ortak Drive'da izin oluşturun. Üyelere ek ayrıcalıklar vermek veya üye olmayan kullanıcıların belirli öğeler üzerinde ortak çalışmasına izin vermek için ortak Drive'daki tek tek dosyalarda da izin yöntemleri kullanılabilir.

Daha fazla bilgi ve örnek kod için Dosya, klasör ve sürücü paylaşma başlıklı makaleyi inceleyin.

Ortak Drive'ları alan yöneticisi olarak yönetme

Bir kuruluş genelinde ortak Drive'ları yönetmek için drives ve permissions kaynaklarıyla birlikte useDomainAdminAccess parametresini uygulayın.

Bu yöntemleri useDomainAdminAccess=true ile çağıran kullanıcıların Drive and Docs yönetici ayrıcalığına sahip olması gerekir. Yöneticiler, herhangi bir ortak Drive'daki üyeliklerinden bağımsız olarak ortak Drive'ları arayabilir veya kuruluşlarına ait ortak Drive'ların izinlerini güncelleyebilir.

Hizmet hesaplarını kullanırken hizmet hesabı kimliğine bürünme özelliğini kullanarak kimliği doğrulanmış bir yöneticinin kimliğine bürünmeniz gerekebilir. Kullanıcı hesaplarının aksine, hizmet hesaplarının Google Workspace alanınıza ait olmadığını unutmayın. Google Workspace dokümanları veya etkinlikleri gibi Google Workspace varlıklarını Google Workspace alanınızın tamamıyla paylaşırsanız bu varlıklar hizmet hesaplarıyla paylaşılmaz. Daha fazla bilgi için Hizmet hesaplarına genel bakış başlıklı makaleyi inceleyin.

Düzenleyeni olmayan bir ortak Drive'ı kurtarma

Aşağıdaki kod örneğinde, artık düzenleyeni olmayan ortak sürücülerin nasıl kurtarılacağı gösterilmektedir.

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

Kullanıcıların dosyanızı indirmesini, yazdırmasını veya kopyalamasını engelleme

Kullanıcıların ortak Drive'lardaki dosyaları indirme, yazdırma ve kopyalama şeklini sınırlayabilirsiniz.

Kullanıcının, ortak Drive'da düzenleyici tarafından uygulanan indirme kısıtlamalarını değiştirip değiştiremeyeceğini belirlemek için capabilities.canChangeDownloadRestriction boolean alanını kontrol edin. capabilities.canChangeDownloadRestriction, true olarak ayarlanırsa ortak drive'a indirme kısıtlamaları uygulanabilir. Daha fazla bilgi için Dosya özelliklerini anlama başlıklı makaleyi inceleyin.

drives kaynağı, bir işlemin ortak Drive'da gerçekleştirilip gerçekleştirilemeyeceğini belirtmek için kullanılan bir grup Boole restrictions alanı içerir. Kısıtlamalar, ortak drive'lar veya ortak drive'lardaki öğeler için geçerlidir. Kısıtlamalar, drives.update yöntemi kullanılarak ayarlanabilir.

Bir ortak drive'a indirme kısıtlamaları uygulamak için ortak drive yöneticisi, drives kaynağının restrictions.downloadRestriction alanını drives DownloadRestriction nesnesini kullanarak ayarlayabilir. restrictedForReaders boole alanını true olarak ayarlamak, hem indirme hem de kopyalama işlemlerinin okuyucular için kısıtlandığını belirtir. restrictedForWriters boolean alanını true olarak ayarlamak, yazarlar için hem indirme hem de kopyalama işlemlerinin kısıtlandığını belirtir. restrictedForWriters alanı true ise okuyucular için indirme ve kopyalama işlemlerinin de kısıtlandığını unutmayın. Benzer şekilde, restrictedForWriters değerini true, restrictedForReaders değerini ise false olarak ayarlamak, hem restrictedForWriters hem de restrictedForReaders değerini true olarak ayarlamaya eşdeğerdir.

Geriye dönük uyumluluk

DownloadRestriction nesnesinin kullanıma sunulmasıyla birlikte, restrictions.copyRequiresWriterPermission boolean alanının işlevselliği güncellendi.

Şimdi, restrictions.copyRequiresWriterPermission ayarını true olarak ayarlamak, okuyucuların hem indirme hem de kopyalama işlemlerinin kısıtlandığını belirtmek için DownloadRestriction nesnesinin restrictedForReaders boole alanını true olarak günceller.

copyRequiresWriterPermission alanını false olarak ayarlamak hem restrictedForWriters hem de restrictedForReaders alanlarını false olarak günceller. Bu, tüm kullanıcılar için indirme veya kopyalama kısıtlama ayarlarının kaldırıldığı anlamına gelir.

İndirme, yazdırma ve kopyalama özelliklerini kontrol eden alanlar

Aşağıdaki tabloda, indirme, yazdırma ve kopyalama işlevlerini etkileyen drives kaynak alanları listelenmiştir:

Alan Açıklama Sürüm
capabilities.canCopy Geçerli kullanıcının ortak Drive'daki dosyaları kopyalayıp kopyalayamayacağı. v2 ve v3
capabilities.canDownload Mevcut kullanıcının ortak Drive'daki dosyaları indirip indiremeyeceği. v2 ve v3
capabilities.canChangeCopyRequiresWriterPermission Mevcut kullanıcının ortak Drive'ın copyRequiresWriterPermission kısıtlamasını değiştirip değiştiremeyeceği. v2 ve v3
capabilities.canResetDriveRestrictions Mevcut kullanıcının ortak drive kısıtlamalarını varsayılan ayarlara sıfırlayıp sıfırlayamayacağı. v2 ve v3
capabilities.canChangeDownloadRestriction Mevcut kullanıcının, ortak drive'ın indirme kısıtlamasını değiştirip değiştiremeyeceği. Yalnızca v3
restrictions.copyRequiresWriterPermission Okuyucular ve yorumcular için ortak Drive'daki dosyaları kopyalama, yazdırma veya indirme seçeneklerinin devre dışı bırakılıp bırakılmadığı true olduğunda, bu ortak drive'daki tüm dosyalar için benzer ada sahip alan true olarak ayarlanır. v2 ve v3
restrictions.downloadRestriction Ortak Drive yöneticileri tarafından uygulanan indirme kısıtlamaları. Yalnızca v3

Klasör sınırlamaları

Ortak Drive klasörlerinde bazı depolama alanı sınırları vardır. Daha fazla bilgi için Google Drive'da ortak Drive sınırları başlıklı makaleyi inceleyin.

Öğe kapasitesi

Her kullanıcının ortak Drive'ı; dosyalar, klasörler ve kısayollar dahil olmak üzere 500.000 öğeyle sınırlıdır.

Sınıra ulaşıldığında ortak Drive artık öğe kabul edemez. Dosya almaya devam etmek için kullanıcıların öğeleri ortak Drive'dan kalıcı olarak silmesi gerekir. Çöp kutusundaki öğelerin sınıra dahil edildiğini, ancak kalıcı olarak silinen öğelerin dahil edilmediğini unutmayın. Daha fazla bilgi için Dosyaları ve klasörleri çöp kutusuna taşıma veya silme başlıklı makaleyi inceleyin.

Klasör derinliği sınırı

Ortak Drive'daki bir klasörde 100'den fazla iç içe yerleştirilmiş klasör olamaz. Bu nedenle, bir alt klasör 99 düzeyden daha derin bir klasörün altına depolanamaz. Bu sınırlama yalnızca alt klasörler için geçerlidir.

100'den fazla klasör düzeyi ekleme girişimleri teamDriveHierarchyTooDeep HTTP durum kodu yanıtı döndürür.