শেয়ার্ড ড্রাইভ পরিচালনা করুন

এই নির্দেশিকাটিতে শেয়ার্ড ড্রাইভ পরিচালনা সম্পর্কিত কাজগুলি রয়েছে, যেমন শেয়ার্ড ড্রাইভ তৈরি করা এবং Google ড্রাইভ API ব্যবহার করে সদস্য এবং অনুমতি পরিচালনা করা।

যদি আপনি প্রতিক্রিয়ায় ফেরত দেওয়ার জন্য ক্ষেত্রগুলি নির্দিষ্ট করতে চান, তাহলে আপনি drives রিসোর্সের যেকোনো পদ্ধতির সাথে fields সিস্টেম প্যারামিটার সেট করতে পারেন। যদি আপনি fields প্যারামিটার নির্দিষ্ট না করেন, তাহলে সার্ভার পদ্ধতির জন্য নির্দিষ্ট ক্ষেত্রগুলির একটি ডিফল্ট সেট ফেরত দেয়। উদাহরণস্বরূপ, list পদ্ধতি প্রতিটি শেয়ার্ড ড্রাইভের জন্য শুধুমাত্র kind , id এবং name ক্ষেত্রগুলি ফেরত দেয়। আরও তথ্যের জন্য, নির্দিষ্ট ক্ষেত্রগুলি ফেরত দিন দেখুন।

শেয়ার্ড ড্রাইভ ফোল্ডারের সীমা সম্পর্কে আরও জানতে, শেয়ার্ড ড্রাইভ ফোল্ডারের সীমা দেখুন।

একটি শেয়ার্ড ড্রাইভ তৈরি করুন

একটি শেয়ার্ড ড্রাইভ তৈরি করতে, requestId প্যারামিটার সহ drives রিসোর্সে create পদ্ধতিটি ব্যবহার করুন।

requestId প্যারামিটারটি একটি শেয়ার্ড ড্রাইভ তৈরির যৌক্তিক প্রচেষ্টা চিহ্নিত করে। যদি অনুরোধের সময়সীমা শেষ হয়ে যায় অথবা একটি অনির্দিষ্ট ব্যাকএন্ড ত্রুটি ফেরত আসে, তাহলে একই অনুরোধ পুনরাবৃত্তি করা যেতে পারে এবং ডুপ্লিকেট তৈরি করবে না। অনুরোধের requestId এবং মূল অংশ একই থাকতে হবে।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি শেয়ার্ড ড্রাইভ তৈরি করতে হয়:

জাভা

ড্রাইভ/স্নিপেটস/ড্রাইভ_ভি৩/এসআরসি/মেইন/জাভা/ক্রিয়েটড্রাইভ.জাভা
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;
    }
  }
}

পাইথন

ড্রাইভ/স্নিপেটস/ড্রাইভ-ভি৩/ড্রাইভ_স্নিপেট/ক্রিয়েট_ড্রাইভ.পি
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()

নোড.জেএস

ড্রাইভ/স্নিপেটস/ড্রাইভ_ভি৩/ড্রাইভ_স্নিপেটস/ক্রিয়েট_ড্রাইভ.জেএস
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';
import {v4 as uuid} from 'uuid';

/**
 * Creates a new shared drive.
 * @return {Promise<string>} 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_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;
    }  

}

.নেট

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/ড্রাইভভি৩স্নিপেট/ক্রিয়েটড্রাইভ.সিএস
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 পদ্ধতিতে কল করা অক্ষম।

যদি পূর্ববর্তী অনুরোধে অথবা পুনরায় চেষ্টা করার ফলে শেয়ার্ড ড্রাইভটি সফলভাবে তৈরি করা হয়ে থাকে, তাহলে পদ্ধতিটি drives রিসোর্সের একটি উদাহরণ প্রদান করে। কখনও কখনও, যেমন দীর্ঘ সময় পরে অথবা অনুরোধের মূল অংশ পরিবর্তিত হলে, একটি 409 ত্রুটি দেখা দিতে পারে যা নির্দেশ করে যে requestId বাতিল করতে হবে।

একটি শেয়ার্ড ড্রাইভ পান

শেয়ার্ড ড্রাইভের মেটাডেটা পেতে, drives রিসোর্সে driveId পাথ প্যারামিটার সহ get পদ্ধতিটি ব্যবহার করুন। যদি আপনি ড্রাইভ আইডি না জানেন, তাহলে list পদ্ধতি ব্যবহার করে আপনি সমস্ত শেয়ার্ড ড্রাইভ তালিকাভুক্ত করতে পারেন।

get পদ্ধতিটি একটি শেয়ার্ড ড্রাইভকে একটি drives রিসোর্সের উদাহরণ হিসেবে ফেরত পাঠায়।

ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে অনুরোধটি ইস্যু করতে, useDomainAdminAccess কোয়েরি প্যারামিটারটি true তে সেট করুন। আরও তথ্যের জন্য, ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে শেয়ার্ড ড্রাইভ পরিচালনা করুন দেখুন।

শেয়ার্ড ড্রাইভের তালিকা তৈরি করুন

ব্যবহারকারীর শেয়ার্ড ড্রাইভ তালিকাভুক্ত করতে, drives রিসোর্সে list পদ্ধতিটি ব্যবহার করুন। পদ্ধতিটি শেয়ার্ড ড্রাইভের একটি তালিকা প্রদান করে।

শেয়ার্ড ড্রাইভের পৃষ্ঠাঙ্কন কাস্টমাইজ করতে বা ফিল্টার করতে নিম্নলিখিত কোয়েরি প্যারামিটারগুলি পাস করুন:

  • pageSize : প্রতি পৃষ্ঠায় সর্বাধিক কতগুলি শেয়ার্ড ড্রাইভ ফেরত পাঠানো যাবে।

  • pageToken : পূর্ববর্তী তালিকা কল থেকে প্রাপ্ত একটি পৃষ্ঠা টোকেন। পরবর্তী পৃষ্ঠাটি পুনরুদ্ধার করতে এই টোকেনটি প্রদান করুন।

  • q : শেয়ার্ড ড্রাইভ অনুসন্ধানের জন্য কোয়েরি স্ট্রিং। আরও তথ্যের জন্য, শেয়ার্ড ড্রাইভ অনুসন্ধান দেখুন।

  • useDomainAdminAccess : ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে অনুরোধটি ইস্যু করার জন্য true তে সেট করুন যাতে অনুরোধকারী যে ডোমেনে প্রশাসক, সেই ডোমেনের সমস্ত শেয়ার্ড ড্রাইভ ফেরত পাঠাতে পারে। আরও তথ্যের জন্য, ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে শেয়ার্ড ড্রাইভ পরিচালনা করুন দেখুন।

একটি শেয়ার্ড ড্রাইভ আপডেট করুন

শেয়ার্ড ড্রাইভের মেটাডেটা আপডেট করতে, driveId পাথ প্যারামিটার সহ drives রিসোর্সে update পদ্ধতি ব্যবহার করুন।

এই পদ্ধতিটি একটি শেয়ার্ড ড্রাইভকে একটি drives রিসোর্সের উদাহরণ হিসেবে ফেরত পাঠায়।

ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে অনুরোধটি ইস্যু করতে, useDomainAdminAccess কোয়েরি প্যারামিটারটি true তে সেট করুন। আরও তথ্যের জন্য, ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে শেয়ার্ড ড্রাইভ পরিচালনা করুন দেখুন।

একটি শেয়ার্ড ড্রাইভ লুকান এবং দেখান

ডিফল্ট ভিউ থেকে একটি শেয়ার্ড ড্রাইভ লুকানোর জন্য, driveId প্যারামিটার সহ drives রিসোর্সে hide পদ্ধতিটি ব্যবহার করুন।

যখন একটি শেয়ার্ড ড্রাইভ লুকানো থাকে, তখন ড্রাইভ শেয়ার্ড ড্রাইভ রিসোর্সটিকে hidden=true হিসেবে চিহ্নিত করে। লুকানো শেয়ার্ড ড্রাইভগুলি ড্রাইভ UI বা ফেরত পাঠানো ফাইলের তালিকায় প্রদর্শিত হয় না।

একটি শেয়ার্ড ড্রাইভকে ডিফল্ট ভিউতে পুনরুদ্ধার করতে, driveId প্যারামিটার সহ drives রিসোর্সে unhide পদ্ধতিটি ব্যবহার করুন।

উভয় পদ্ধতিই একটি শেয়ার্ড ড্রাইভকে একটি drives রিসোর্সের উদাহরণ হিসেবে ফেরত দেয়।

একটি শেয়ার্ড ড্রাইভ মুছুন

একটি শেয়ার্ড ড্রাইভ স্থায়ীভাবে মুছে ফেলার জন্য, driveId প্যারামিটার সহ drives রিসোর্সে delete পদ্ধতি ব্যবহার করুন।

শেয়ার্ড ড্রাইভ মুছে ফেলার আগে, শেয়ার্ড ড্রাইভের সমস্ত কন্টেন্ট ট্র্যাশে স্থানান্তরিত করতে হবে অথবা মুছে ফেলতে হবে। ব্যবহারকারীর শেয়ার্ড ড্রাইভ ফোল্ডারে role=organizer থাকতে হবে। আরও তথ্যের জন্য, Trash or delete files and folders দেখুন।

শেয়ার্ড ড্রাইভ ফিল্টার করতে নিম্নলিখিত কোয়েরি প্যারামিটারগুলি পাস করুন:

  • useDomainAdminAccess : ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে অনুরোধটি ইস্যু করার জন্য true তে সেট করুন যাতে অনুরোধকারী যে ডোমেনে প্রশাসক, সেই ডোমেনের সমস্ত শেয়ার্ড ড্রাইভ ফেরত পাঠাতে পারে। আরও তথ্যের জন্য, ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে শেয়ার্ড ড্রাইভ পরিচালনা করুন দেখুন।

  • allowItemDeletion : শেয়ার্ড ড্রাইভের মধ্যে থাকা আইটেমগুলি মুছে ফেলার জন্য true তে সেট করা হয়। শুধুমাত্র তখনই সমর্থিত যখন useDomainAdminAccess true তে সেট করা থাকে।

শেয়ার্ড ড্রাইভের সদস্যদের যোগ করুন বা সরান

permissions রিসোর্স ব্যবহার করে শেয়ার্ড ড্রাইভের সদস্যদের যোগ করুন বা সরান।

সদস্য যোগ করতে, শেয়ার্ড ড্রাইভে অনুমতি তৈরি করুন। সদস্যদের অতিরিক্ত সুযোগ-সুবিধা প্রদান করতে অথবা সদস্য নয় এমন ব্যক্তিদের নির্দিষ্ট আইটেমগুলিতে সহযোগিতা করার অনুমতি দেওয়ার জন্য শেয়ার্ড ড্রাইভের মধ্যে পৃথক ফাইলগুলিতেও অনুমতি পদ্ধতি ব্যবহার করা যেতে পারে।

আরও তথ্য এবং নমুনা কোডের জন্য, ফাইল, ফোল্ডার এবং ড্রাইভ শেয়ার করুন দেখুন।

ডোমেন অ্যাডমিনিস্ট্রেটর হিসেবে শেয়ার্ড ড্রাইভ পরিচালনা করুন

একটি প্রতিষ্ঠান জুড়ে শেয়ার্ড ড্রাইভ পরিচালনা করার জন্য drives এবং permissions সংস্থানগুলির সাথে useDomainAdminAccess প্যারামিটার প্রয়োগ করুন।

এই পদ্ধতিগুলিকে useDomainAdminAccess=true দিয়ে কল করা ব্যবহারকারীদের Drive and Docs অ্যাডমিনিস্ট্রেটরের বিশেষাধিকার থাকতে হবে। অ্যাডমিনিস্ট্রেটররা শেয়ার্ড ড্রাইভ অনুসন্ধান করতে পারেন অথবা তাদের প্রতিষ্ঠানের মালিকানাধীন শেয়ার্ড ড্রাইভের জন্য অনুমতি আপডেট করতে পারেন, যেকোনো শেয়ার্ড ড্রাইভে প্রশাসকের সদস্যপদ নির্বিশেষে।

পরিষেবা অ্যাকাউন্ট ব্যবহার করার সময়, আপনাকে পরিষেবা অ্যাকাউন্টের ছদ্মবেশ ব্যবহার করে একজন প্রমাণিত প্রশাসকের ছদ্মবেশ ধারণ করতে হতে পারে। মনে রাখবেন যে ব্যবহারকারীর অ্যাকাউন্টের মতো পরিষেবা অ্যাকাউন্টগুলি আপনার Google Workspace ডোমেনের অন্তর্গত নয় । আপনি যদি Google Workspace সম্পদ, যেমন ডকুমেন্ট বা ইভেন্ট, আপনার সম্পূর্ণ Google Workspace ডোমেনের সাথে শেয়ার করেন, তাহলে সেগুলি পরিষেবা অ্যাকাউন্টের সাথে শেয়ার করা হয় না। আরও তথ্যের জন্য, পরিষেবা অ্যাকাউন্টের ওভারভিউ দেখুন।

একটি শেয়ার্ড ড্রাইভ পুনরুদ্ধার করুন যার কোনও অর্গানাইজার নেই

নিচের কোড নমুনাটি দেখায় কিভাবে শেয়ার্ড ড্রাইভগুলি পুনরুদ্ধার করবেন যার আর কোনও অর্গানাইজার নেই।

জাভা

ড্রাইভ/স্নিপেটস/ড্রাইভ_ভি৩/এসআরসি/মেইন/জাভা/রিকভারড্রাইভ.জাভা
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;
  }
}

পাইথন

ড্রাইভ/স্নিপেটস/ড্রাইভ-ভি৩/ড্রাইভ_স্নিপেট/রিকোভার_ড্রাইভস.পি
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")

নোড.জেএস

ড্রাইভ/স্নিপেটস/ড্রাইভ_ভি৩/ড্রাইভ_স্নিপেটস/রিকোভার_ড্রাইভস.জেএস
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 {Promise<object[]>} 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 ?? [];
}

পিএইচপি

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/এসআরসি/ড্রাইভরিকভারড্রাইভস.পিএইচপি
<?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;
   }
}

.নেট

ড্রাইভ/স্নিপেট/ড্রাইভ_ভি৩/ড্রাইভভি৩স্নিপেট/রিকভারড্রাইভস.সিএস
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;
        }
    }
}

ব্যবহারকারীদের আপনার ফাইল ডাউনলোড, প্রিন্ট বা কপি করা থেকে বিরত রাখুন

ব্যবহারকারীরা শেয়ার্ড ড্রাইভের মধ্যে ফাইল ডাউনলোড, প্রিন্ট এবং কপি করার সময়সীমা আপনি সীমিত করতে পারেন।

ব্যবহারকারী একটি শেয়ার্ড ড্রাইভের অর্গানাইজার-প্রয়োগকৃত ডাউনলোড সীমাবদ্ধতা পরিবর্তন করতে পারবেন কিনা তা নির্ধারণ করতে, capabilities.canChangeDownloadRestriction বুলিয়ান ফিল্ডটি পরীক্ষা করুন। যদি capabilities.canChangeDownloadRestriction true তে সেট করা থাকে, তাহলে শেয়ার্ড ড্রাইভে ডাউনলোড সীমাবদ্ধতা প্রয়োগ করা যেতে পারে। আরও তথ্যের জন্য, Understand file capabilities দেখুন।

drives রিসোর্সে বুলিয়ান restrictions ক্ষেত্রগুলির একটি সংগ্রহ রয়েছে যা শেয়ার্ড ড্রাইভে কোনও ক্রিয়া সম্পাদন করা যেতে পারে কিনা তা নির্দেশ করতে ব্যবহৃত হয়। শেয়ার্ড ড্রাইভ বা শেয়ার্ড ড্রাইভের ভিতরে থাকা আইটেমগুলিতে বিধিনিষেধ প্রযোজ্য। drives.update পদ্ধতি ব্যবহার করে বিধিনিষেধ সেট করা যেতে পারে।

একটি শেয়ার্ড ড্রাইভে ডাউনলোড সীমাবদ্ধতা প্রয়োগ করতে, একটি শেয়ার্ড ড্রাইভ ম্যানেজার DownloadRestriction অবজেক্ট ব্যবহার করে drives রিসোর্সের restrictions.downloadRestriction ক্ষেত্র সেট করতে পারে। restrictedForReaders বুলিয়ান ক্ষেত্রটিকে true তে সেট করলে ঘোষণা করা হয় যে ডাউনলোড এবং কপি উভয়ই পাঠকদের জন্য সীমাবদ্ধ। restrictedForWriters বুলিয়ান ক্ষেত্রটিকে true তে সেট করলে ঘোষণা করা হয় যে ডাউনলোড এবং কপি উভয়ই লেখকদের জন্য সীমাবদ্ধ। মনে রাখবেন যে যদি restrictedForWriters ক্ষেত্রটি true হয়, তাহলে download এবং copy পাঠকদের জন্যও সীমাবদ্ধ। একইভাবে, restrictedForWriters কে true এবং restrictedForReaders false তে সেট করলে restrictedForWriters এবং restrictedForReaders উভয়কেই true তে সেট করার সমতুল্য।

পশ্চাদমুখী সামঞ্জস্য

DownloadRestriction অবজেক্ট চালু হওয়ার সাথে সাথে, restrictions.copyRequiresWriterPermission বুলিয়ান ফিল্ডের কার্যকারিতা আপডেট করা হয়েছে।

এখন, restrictions.copyRequiresWriterPermission কে true এ সেট করলে DownloadRestriction অবজেক্টের restrictedForReaders বুলিয়ান ফিল্ডটি true এ আপডেট হয় এবং ঘোষণা করা হয় যে ডাউনলোড এবং কপি উভয়ই পাঠকদের জন্য সীমাবদ্ধ।

copyRequiresWriterPermission ফিল্ডটিকে false এ সেট করলে restrictedForWriters এবং restrictedForReaders ফিল্ড উভয়কেই false এ আপডেট করা হয়। এর অর্থ হল সকল ব্যবহারকারীর জন্য ডাউনলোড বা কপি সীমাবদ্ধতা সেটিংস সরানো হয়েছে।

ডাউনলোড, প্রিন্ট এবং কপি বৈশিষ্ট্যগুলি নিয়ন্ত্রণ করে এমন ক্ষেত্রগুলি

নিম্নলিখিত টেবিলে drives রিসোর্স ক্ষেত্রগুলির তালিকা দেওয়া হয়েছে যা ডাউনলোড, প্রিন্ট এবং কপি কার্যকারিতাকে প্রভাবিত করে:

মাঠ বিবরণ সংস্করণ
capabilities.canCopy বর্তমান ব্যবহারকারী শেয়ার্ড ড্রাইভে ফাইল কপি করতে পারবেন কিনা। v2 এবং v3
capabilities.canDownload বর্তমান ব্যবহারকারী শেয়ার্ড ড্রাইভে ফাইল ডাউনলোড করতে পারবেন কিনা। v2 & v3
capabilities.canChangeCopyRequiresWriterPermission বর্তমান ব্যবহারকারী শেয়ার্ড ড্রাইভের copyRequiresWriterPermission সীমাবদ্ধতা পরিবর্তন করতে পারবেন কিনা। v2 এবং v3
capabilities.canResetDriveRestrictions বর্তমান ব্যবহারকারী শেয়ার্ড ড্রাইভের সীমাবদ্ধতা ডিফল্টে রিসেট করতে পারবেন কিনা। v2 এবং v3
capabilities.canChangeDownloadRestriction বর্তমান ব্যবহারকারী শেয়ার্ড ড্রাইভের ডাউনলোড সীমাবদ্ধতা পরিবর্তন করতে পারবেন কিনা। শুধুমাত্র v3
restrictions.copyRequiresWriterPermission শেয়ার্ড ড্রাইভের ভিতরে ফাইল কপি, প্রিন্ট বা ডাউনলোড করার বিকল্পগুলি পাঠক এবং মন্তব্যকারীদের জন্য বন্ধ করা আছে কিনা। যখন true , তখন এটি এই শেয়ার্ড ড্রাইভের ভিতরে থাকা যেকোনো ফাইলের জন্য একই নামের ফিল্ডটিকে true তে সেট করে। v2 এবং v3
restrictions.downloadRestriction শেয়ার্ড ড্রাইভ ম্যানেজারদের দ্বারা প্রযোজ্য ডাউনলোড বিধিনিষেধ। শুধুমাত্র v3

ফোল্ডারের সীমা

শেয়ার্ড ড্রাইভ ফোল্ডারগুলির কিছু স্টোরেজ সীমা রয়েছে। তথ্যের জন্য, গুগল ড্রাইভে শেয়ার্ড ড্রাইভ সীমা দেখুন।

আইটেম ক্যাপ

প্রতিটি ব্যবহারকারীর শেয়ার্ড ড্রাইভে ফাইল, ফোল্ডার এবং শর্টকাট সহ ৫০০,০০০ আইটেমের সীমা রয়েছে।

সীমায় পৌঁছে গেলে, শেয়ার্ড ড্রাইভ আর আইটেম গ্রহণ করতে পারবে না। ফাইল গ্রহণ আবার শুরু করতে, ব্যবহারকারীদের শেয়ার্ড ড্রাইভ থেকে আইটেমগুলি স্থায়ীভাবে মুছে ফেলতে হবে। মনে রাখবেন যে ট্র্যাশে থাকা আইটেমগুলি সীমার মধ্যে গণনা করা হবে, কিন্তু স্থায়ীভাবে মুছে ফেলা আইটেমগুলি তা করে না। আরও তথ্যের জন্য, ফাইল এবং ফোল্ডারগুলি ট্র্যাশ করুন বা মুছুন দেখুন।

ফোল্ডারের গভীরতার সীমা

একটি শেয়ার্ড ড্রাইভের একটি ফোল্ডারে ১০০ স্তরের বেশি নেস্টেড ফোল্ডার থাকতে পারে না। এর অর্থ হল, ৯৯ স্তরের বেশি গভীর ফোল্ডারের অধীনে একটি চাইল্ড ফোল্ডার সংরক্ষণ করা যাবে না। এই সীমাবদ্ধতা শুধুমাত্র চাইল্ড ফোল্ডারগুলির ক্ষেত্রে প্রযোজ্য।

১০০টিরও বেশি স্তরের ফোল্ডার যোগ করার প্রচেষ্টা একটি teamDriveHierarchyTooDeep HTTP স্ট্যাটাস কোড প্রতিক্রিয়া প্রদান করে।