درایوهای مشترک را مدیریت کنید

این راهنما شامل وظایف مربوط به مدیریت درایوهای اشتراکی، مانند ایجاد درایوهای اشتراکی و مدیریت اعضا و مجوزها، با استفاده از API گوگل درایو است.

اگر می‌خواهید فیلدهایی را که باید در پاسخ برگردانده شوند، مشخص کنید، می‌توانید پارامتر سیستمی fields را با هر متدی از منبع drives تنظیم کنید. اگر پارامتر fields را مشخص نکنید، سرور مجموعه‌ای پیش‌فرض از فیلدهای خاص برای متد را برمی‌گرداند. برای مثال، متد list فقط فیلدهای kind ، id و name را برای هر درایو مشترک برمی‌گرداند. برای اطلاعات بیشتر، به بخش Return specific fields مراجعه کنید.

برای کسب اطلاعات بیشتر در مورد محدودیت‌های پوشه درایو مشترک، به محدودیت‌های پوشه درایو مشترک مراجعه کنید.

ایجاد درایو مشترک

برای ایجاد یک درایو مشترک، از متد create روی منبع drives به همراه پارامتر requestId استفاده کنید.

پارامتر requestId تلاش منطقی برای ایجاد یک درایو مشترک به صورت خودکار را مشخص می‌کند. اگر زمان درخواست تمام شود یا خطای نامشخصی در backend برگرداند، همان درخواست می‌تواند تکرار شود و موارد تکراری ایجاد نخواهد شد. requestId و بدنه درخواست باید یکسان باقی بمانند.

نمونه کد زیر نحوه ایجاد یک درایو مشترک را نشان می‌دهد:

جاوا

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

پایتون

‎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()

نود جی اس

‎drive/snippets/drive_v3/drive_snippets/create_drive.js‎‏
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';
import {v4 as uuid} from 'uuid';

/**
 * Creates a new shared dr<ive.
 >* @return {Promisestring} The ID of the created shared drive.
 */
async function createDrive() {
  // Authenticate with Google and get an authorized client.
  // TODO (developer): Use an appropriate auth mechanism for your app.
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });

  // Create a new Drive API client (v3).
  const service = google.drive({version: 'v3', auth});

  // The metadata for the new shared drive.
  const driveMetadata = {
    name: 'Project resources',
  };

  // A unique request ID to avoid creating duplicate shared drives.
  const requestId = uuid();

  // Create the new shared drive.
  const Drive = await service.drives.create({
    requestBody: driveMetadata,
    requestId,
    fields: 'id',
  });

  // Print the ID of the new shared drive.
  console.log('Drive Id:', Drive.data.id);
  if (!Drive.data.id) {
    throw new Error('Drive ID not found.');
  }
  return Drive.data.id;
}

پی اچ پی

‎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(
                'nam>e' = 'Project Resources'));
        $requestId >= Uuid::uuid4()-toString();
        $drive >= $driv>eService-drives-create($requestId, $driveMetadata, array(
          >      'fields' = 'id'));
        >printf("Drive ID: %s\n>", $drive-id);
        return $drive-id;
    } catch(Exception $e)  {
        echo "Error Message: ".$e;
    }  

}

دات نت

‎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
    {
        </// sum>mary
        /// Create a drive.
        </// /sum>mary
        </// ret>urnsnewly created drive< Id./ret>urns
        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 خودتوان (idempotent) هستند.

اگر درایو مشترک در درخواست قبلی یا به دلیل تلاش مجدد با موفقیت ایجاد شده باشد، این متد نمونه‌ای از منبع drives را برمی‌گرداند. گاهی اوقات، مثلاً پس از مدت زمان طولانی یا اگر بدنه درخواست تغییر کرده باشد، ممکن است خطای 409 برگردانده شود که نشان می‌دهد requestId باید نادیده گرفته شود.

یک درایو اشتراکی دریافت کنید

برای دریافت متادیتای یک درایو مشترک، از متد get روی منبع drives به همراه پارامتر مسیر driveId استفاده کنید. اگر شناسه درایو را نمی‌دانید، می‌توانید با استفاده از متد list ، تمام درایوهای مشترک را فهرست کنید .

متد get یک درایو مشترک را به عنوان نمونه‌ای از منبع drives برمی‌گرداند.

برای صدور درخواست به عنوان مدیر دامنه، پارامتر query مربوط useDomainAdminAccess را روی true تنظیم کنید. برای اطلاعات بیشتر، به بخش مدیریت درایوهای مشترک به عنوان مدیر دامنه مراجعه کنید.

فهرست کردن درایوهای اشتراکی

برای فهرست کردن درایوهای اشتراکی یک کاربر، از متد list روی منبع drives استفاده کنید. این متد لیستی از درایوهای اشتراکی را برمی‌گرداند.

پارامترهای پرس و جوی زیر را برای سفارشی‌سازی صفحه‌بندی یا فیلتر کردن درایوهای اشتراکی ارسال کنید:

  • pageSize : حداکثر تعداد درایوهای مشترک برای برگرداندن به ازای هر صفحه.

  • pageToken : یک توکن صفحه که از فراخوانی لیست قبلی دریافت شده است. این توکن را برای بازیابی صفحه بعدی ارائه دهید.

  • q : رشته پرس‌وجو برای جستجوی درایوهای مشترک. برای اطلاعات بیشتر، به «جستجوی درایوهای مشترک» مراجعه کنید.

  • useDomainAdminAccess : برای صدور درخواست به عنوان مدیر دامنه و بازگرداندن تمام درایوهای مشترک دامنه‌ای که درخواست‌کننده در آن مدیر است، روی true تنظیم کنید. برای اطلاعات بیشتر، به مدیریت درایوهای مشترک به عنوان مدیران دامنه مراجعه کنید.

به‌روزرسانی درایو اشتراکی

برای به‌روزرسانی متادیتای یک درایو مشترک، از متد update روی منبع drives با پارامتر مسیر driveId استفاده کنید.

این متد یک درایو اشتراکی را به عنوان نمونه‌ای از منبع drives برمی‌گرداند.

برای صدور درخواست به عنوان مدیر دامنه، پارامتر query مربوط useDomainAdminAccess را روی true تنظیم کنید. برای اطلاعات بیشتر، به بخش مدیریت درایوهای مشترک به عنوان مدیر دامنه مراجعه کنید.

مخفی کردن و نمایش درایو مشترک

برای پنهان کردن یک درایو مشترک از نمای پیش‌فرض، از متد hide روی منبع drives با پارامتر driveId استفاده کنید.

وقتی یک درایو مشترک پنهان می‌شود، درایو منبع درایو مشترک را با عنوان hidden=true علامت‌گذاری می‌کند. درایوهای مشترک پنهان در رابط کاربری درایو یا در لیست فایل‌های برگردانده شده نمایش داده نمی‌شوند.

برای بازیابی یک درایو مشترک به نمای پیش‌فرض، از متد unhide روی منبع drives با پارامتر driveId استفاده کنید.

هر دو روش یک درایو مشترک را به عنوان نمونه‌ای از منبع drives برمی‌گردانند.

حذف یک درایو مشترک

برای حذف دائمی یک درایو مشترک، از متد delete روی منبع drives به همراه پارامتر driveId استفاده کنید.

قبل از حذف یک درایو مشترک، تمام محتوای موجود در درایو مشترک باید به سطل زباله منتقل یا حذف شود. کاربر همچنین باید role=organizer در پوشه درایو مشترک داشته باشد. برای اطلاعات بیشتر، به حذف شده‌ها یا حذف فایل‌ها و پوشه‌ها مراجعه کنید.

پارامترهای پرس و جوی زیر را برای فیلتر کردن درایوهای اشتراکی ارسال کنید:

  • useDomainAdminAccess : برای صدور درخواست به عنوان مدیر دامنه و بازگرداندن تمام درایوهای مشترک دامنه‌ای که درخواست‌کننده در آن مدیر است، روی true تنظیم کنید. برای اطلاعات بیشتر، به مدیریت درایوهای مشترک به عنوان مدیران دامنه مراجعه کنید.

  • allowItemDeletion : برای حذف موارد درون درایو مشترک، روی true تنظیم می‌شود. فقط زمانی پشتیبانی می‌شود که useDomainAdminAccess نیز روی true تنظیم شده باشد.

اضافه کردن یا حذف اعضای درایو مشترک

با استفاده از منبع permissions ، اعضای درایو مشترک را اضافه یا حذف کنید.

برای افزودن یک عضو، مجوز را در درایو مشترک ایجاد کنید. روش‌های مجوز همچنین می‌توانند برای فایل‌های جداگانه در یک درایو مشترک استفاده شوند تا به اعضا امتیازات اضافی اعطا شود یا به افراد غیر عضو اجازه داده شود تا در موارد خاص همکاری کنند.

برای اطلاعات بیشتر و نمونه کد، به اشتراک‌گذاری فایل‌ها، پوشه‌ها و درایوها مراجعه کنید.

مدیریت درایوهای اشتراکی به عنوان مدیر دامنه

پارامتر useDomainAdminAccess را با drives و منابع permissions برای مدیریت درایوهای مشترک در سراسر سازمان اعمال کنید.

کاربرانی که این متدها را با useDomainAdminAccess=true فراخوانی می‌کنند، باید دارای امتیاز مدیر Drive and Docs باشند. مدیران می‌توانند درایوهای مشترک را جستجو کنند یا مجوزهای درایوهای مشترک متعلق به سازمان خود را به‌روزرسانی کنند، صرف نظر از عضویت مدیر در هر درایو مشترک.

هنگام استفاده از حساب‌های سرویس، ممکن است مجبور شوید با استفاده از جعل هویت حساب سرویس ، خود را به عنوان یک مدیر احراز هویت شده جا بزنید. توجه داشته باشید که حساب‌های سرویس، برخلاف حساب‌های کاربری، به دامنه Google Workspace شما تعلق ندارند . اگر دارایی‌های Google Workspace، مانند اسناد یا رویدادها، را با کل دامنه Google Workspace خود به اشتراک بگذارید، آنها با حساب‌های سرویس به اشتراک گذاشته نمی‌شوند. برای اطلاعات بیشتر، به نمای کلی حساب‌های سرویس مراجعه کنید.

بازیابی درایو اشتراکی که سازماندهی‌کننده ندارد

نمونه کد زیر نحوه بازیابی درایوهای اشتراکی که دیگر سازماندهی‌کننده ندارند را نشان می‌دهد.

جاوا

‎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 sta<tic L>istDrive 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")
            <.buil>d();
    ListDrive driv<es = >new ArrayListDrive();

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

پایتون

‎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")

نود جی اس

درایو/قطعه کدها/drive_v3/قطعه کدها/recover_drives.js
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';

/**
 * Finds all shared drives without an organizer and adds one.
 * @param {string} userEmail The email of the user to assign ownership to.
 * <@return >{Promiseobject[]} A list of the recovered drives.
 */
async function recoverDrives(userEmail) {
  // Authenticate with Google and get an authorized client.
  // TODO (developer): Use an appropriate auth mechanism for your app.
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });

  // Create a new Drive API client (v3).
  const service = google.drive({version: 'v3', auth});

  // The permission to add to the shared drive.
  const newOrganizerPermission = {
    type: 'user',
    role: 'organizer',
    emailAddress: userEmail, // e.g., 'user@example.com'
  };

  // List all shared drives with no organizers.
  const result = await service.drives.list({
    q: 'organizerCount = 0',
    fields: 'nextPageToken, drives(id, name)',
    useDomainAdminAccess: true,
  });

  // Add the new organizer to each found shared drive.
  for (const drive of result.data.drives ?? []) {
    if (!drive.id) {
      continue;
    }

    console.log('Found shared drive without organizer:', drive.name, drive.id);
    await service.permissions.create({
      requestBody: newOrganizerPermission,
      fileId: drive.id,
      useDomainAdminAccess: true,
      supportsAllDrives: true,
      fields: 'id',
    });
  }
  return result.data.drives ?? [];
}

پی اچ پی

درایو/قطعه کد/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' = 'u>ser',
        'role' = >9;organizer',
        'emailAddress' = 'user@example.com'
    ));
    $newOrganizerPermission['emailAddr>ess'>;] = $realUser;
    do {
        $r>esponse = $driveService-drives-listDrives(arr>ay(
            'q' = 'organizerCount = 0',
            >'fields' = 'nextPage>Token, drives(id, name)',
            'useD>omainAdminAccess' = true,
            'pageToken' = $pageToken
        ));
        foreach ($response>-drives as $d>rive) {
            printf("Found shared> drive witho>ut organizer: >%s (%s)\n",
                $drive-name, $drive-id);
            $permission = $driveService->permissions-create($drive-id,
                $newO>rganizerPermission,
                array(
     >               'fields' = 'id',
                    'useDomainAdminAccess>' = true,
                    'supportsAllDri>ves' = 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;
   }
}

دات نت

‎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
    {
        </// sum>mary
        /// Find all shared drives without an organizer and add one.
        </// /sum>mary
        </// param name=">realUser"User ID for the <new or>ganizer./para<m
     >   /// returnsall shared drives without< an orga>nizer./returns
        publi<c sta>tic IListDrive 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"
                });

             <   va>r drives = new ListDrive();
                // 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;
        }
    }
}

جلوگیری از دانلود، چاپ یا کپی کردن فایل توسط کاربران

شما می‌توانید نحوه دانلود، چاپ و کپی فایل‌ها در درایوهای مشترک توسط کاربران را محدود کنید.

برای تعیین اینکه آیا کاربر می‌تواند محدودیت‌های دانلود اعمال‌شده توسط سازمان‌دهنده در یک درایو مشترک را تغییر دهد، فیلد بولی capabilities.canChangeDownloadRestriction را بررسی کنید. اگر capabilities.canChangeDownloadRestriction روی true تنظیم شده باشد، محدودیت‌های دانلود می‌توانند روی درایو مشترک اعمال شوند. برای اطلاعات بیشتر، به بخش «درک قابلیت‌های فایل» مراجعه کنید.

منبع drives شامل مجموعه‌ای از فیلدهای restrictions بولی است که برای نشان دادن اینکه آیا یک عمل می‌تواند روی یک درایو مشترک انجام شود یا خیر، استفاده می‌شود. محدودیت‌ها بر روی یک درایو مشترک یا موارد داخل یک درایو مشترک اعمال می‌شوند. محدودیت‌ها را می‌توان با استفاده از متد drives.update تنظیم کرد.

برای اعمال محدودیت‌های دانلود به یک درایو مشترک، یک مدیر درایو مشترک می‌تواند فیلد restrictions.downloadRestriction از منبع drives را با استفاده از شیء DownloadRestriction تنظیم کند. تنظیم فیلد بولی restrictedForReaders به true اعلام می‌کند که هم دانلود و هم کپی برای خوانندگان محدود شده است. تنظیم فیلد بولی restrictedForWriters به true اعلام می‌کند که هم دانلود و هم کپی برای نویسندگان محدود شده است. توجه داشته باشید که اگر فیلد restrictedForWriters به true باشد، دانلود و کپی نیز برای خوانندگان محدود شده است. به طور مشابه، تنظیم restrictedForWriters به true و restrictedForReaders به false معادل تنظیم restrictedForWriters و restrictedForReaders به true است.

سازگاری با نسخه‌های قبلی

با معرفی شیء DownloadRestriction ، عملکرد فیلد بولی restrictions.copyRequiresWriterPermission به‌روزرسانی شده است.

اکنون، تنظیم restrictions.copyRequiresWriterPermission به true فیلد بولی restrictedForReaders از شیء DownloadRestriction را به true به‌روزرسانی می‌کند تا اعلام کند که هم دانلود و هم کپی برای خوانندگان محدود شده است.

تنظیم فیلد copyRequiresWriterPermission روی false هر دو فیلد restrictedForWriters و restrictedForReaders را روی false به‌روزرسانی می‌کند. این یعنی تنظیمات محدودیت دانلود یا کپی برای همه کاربران حذف می‌شود.

فیلدهایی که ویژگی‌های دانلود، چاپ و کپی را کنترل می‌کنند

جدول زیر فیلدهای منبع drives که بر عملکرد دانلود، چاپ و کپی تأثیر می‌گذارند، فهرست می‌کند:

میدان توضیحات نسخه
capabilities.canCopy اینکه آیا کاربر فعلی می‌تواند فایل‌های موجود در درایو مشترک را کپی کند یا خیر. نسخه ۲ و نسخه ۳
capabilities.canDownload اینکه آیا کاربر فعلی می‌تواند فایل‌های موجود در درایو مشترک را دانلود کند یا خیر. نسخه ۲ و نسخه ۳
capabilities.canChangeCopyRequiresWriterPermission اینکه آیا کاربر فعلی می‌تواند محدودیت copyRequiresWriterPermission یک درایو مشترک را تغییر دهد یا خیر. نسخه ۲ و نسخه ۳
capabilities.canResetDriveRestrictions اینکه آیا کاربر فعلی می‌تواند محدودیت‌های درایو مشترک را به پیش‌فرض‌ها بازنشانی کند یا خیر. نسخه ۲ و نسخه ۳
capabilities.canChangeDownloadRestriction اینکه آیا کاربر فعلی می‌تواند محدودیت دانلود یک درایو مشترک را تغییر دهد یا خیر. فقط نسخه ۳
restrictions.copyRequiresWriterPermission اینکه آیا گزینه‌های کپی، چاپ یا دانلود فایل‌ها در داخل یک درایو مشترک برای خوانندگان و نظردهندگان غیرفعال است یا خیر. وقتی true ، فیلد هم‌نام را برای هر فایلی در داخل این درایو مشترک روی true تنظیم می‌کند. نسخه ۲ و نسخه ۳
restrictions.downloadRestriction محدودیت‌های دانلود اعمال‌شده توسط مدیران درایو اشتراکی. فقط نسخه ۳

محدودیت‌های پوشه

پوشه‌های درایو اشتراکی محدودیت‌هایی برای فضای ذخیره‌سازی دارند. برای اطلاعات بیشتر، به محدودیت‌های درایو اشتراکی در گوگل درایو مراجعه کنید.

کلاه مورد

درایو اشتراکی هر کاربر محدودیت ۵۰۰۰۰۰ مورد، شامل فایل‌ها، پوشه‌ها و میانبرها را دارد.

وقتی به حد مجاز رسید، درایو اشتراکی دیگر نمی‌تواند فایل‌ها را بپذیرد. برای از سرگیری دریافت فایل‌ها، کاربران باید فایل‌ها را به طور دائم از درایو اشتراکی حذف کنند. توجه داشته باشید که فایل‌های موجود در سطل زباله به حد مجاز اضافه می‌شوند، اما فایل‌هایی که به طور دائم حذف شده‌اند، به این حد اضافه نمی‌شوند. برای اطلاعات بیشتر، به بخش حذف فایل‌ها یا حذف فایل‌ها و پوشه‌ها مراجعه کنید.

محدودیت عمق پوشه

یک پوشه در یک درایو مشترک نمی‌تواند بیش از ۱۰۰ سطح پوشه تو در تو داشته باشد. این بدان معناست که یک پوشه فرزند نمی‌تواند در زیر پوشه‌ای با عمق بیش از ۹۹ سطح ذخیره شود. این محدودیت فقط در مورد پوشه‌های فرزند اعمال می‌شود.

تلاش برای افزودن بیش از ۱۰۰ سطح پوشه، پاسخ کد وضعیت HTTP با شناسه teamDriveHierarchyTooDeep را برمی‌گرداند.