ফাইল, ফোল্ডার এবং ড্রাইভ শেয়ার করুন

গুগল ড্রাইভের প্রতিটি ফাইল, ফোল্ডার এবং শেয়ার করা ড্রাইভের সাথে সংশ্লিষ্ট permissions রিসোর্স থাকে। প্রতিটি রিসোর্স একটি নির্দিষ্ট type ( user , group , domain , anyone ) এবং role ( owner , organizer , fileOrganizer , writer , commenter , reader ) জন্য পারমিশন চিহ্নিত করে। উদাহরণস্বরূপ, একটি ফাইলের এমন একটি পারমিশন থাকতে পারে যা একজন নির্দিষ্ট ইউজারকে ( type=user ) শুধুমাত্র পড়ার (রিড-অনলি) অ্যাক্সেস ( role=reader ) দেয়, যেখানে অন্য একটি পারমিশন একটি নির্দিষ্ট গ্রুপের ( type=group ) সদস্যদের ফাইলটিতে কমেন্ট যোগ করার ( role=commenter ) ক্ষমতা দেয়।

ভূমিকাগুলির সম্পূর্ণ তালিকা এবং প্রতিটি দ্বারা অনুমোদিত ক্রিয়াকলাপগুলির জন্য, ভূমিকা এবং অনুমতিগুলি দেখুন।

অনুমতিগুলি কীভাবে প্রচার করে

অনুমতিগুলি প্যারেন্ট ফোল্ডার থেকে নিচের দিকে সমস্ত চাইল্ড আইটেমে সঞ্চারিত হয়:

  • ডিফল্টরূপে উত্তরাধিকারসূত্রে প্রাপ্ত : সমস্ত চাইল্ড ফাইল এবং ফোল্ডার স্বয়ংক্রিয়ভাবে তাদের প্যারেন্ট ফোল্ডার থেকে পারমিশন উত্তরাধিকার সূত্রে পায়।
  • চাইল্ড আইটেমে কমানো যাবে না : আপনি কোনো চাইল্ড আইটেম থেকে উত্তরাধিকারসূত্রে প্রাপ্ত পারমিশন সরাতে বা কমাতে পারবেন না। পরিবর্তন অবশ্যই মূল প্যারেন্ট আইটেমে করতে হবে, অথবা ফোল্ডারটিতে সীমিত অ্যাক্সেস সেটিং ব্যবহার করতে হবে।
  • চাইল্ড আইটেমের ক্ষেত্রে এটি আরও সম্প্রসারিত করা যায় : একটি চাইল্ড আইটেম আরও উদার ভূমিকা প্রদান করতে পারে, যেমন কোনো ফোল্ডারের ভেতরের একটি ফাইলে role=writer প্রদান করা, যেখানে ব্যবহারকারীর role=reader রয়েছে।
  • স্থানান্তরের সময় পুনঃমূল্যায়ন : কোনো আইটেমকে একটি নতুন প্যারেন্ট ফোল্ডারে স্থানান্তর করলে, সেই আইটেম এবং তার চাইল্ডগুলোর উপর নতুন প্যারেন্টের পারমিশনগুলো পুনঃমূল্যায়ন ও প্রয়োগ করা হয়।

ফাইল লিঙ্ক এবং অ্যাক্সেস নিয়ন্ত্রণ

যখন আপনি কোনো নির্দিষ্ট ব্যবহারকারী বা গ্রুপের সাথে একটি ফাইল বা ফোল্ডার শেয়ার করেন, তখন আইটেমটি অ্যাক্সেস করার URL পরিবর্তিত হয় না এবং প্রতিটি ব্যবহারকারীর জন্য একটি অনন্য লিঙ্ক তৈরি হয় না। এর পরিবর্তে, আইটেমটির fileId এর উপর ভিত্তি করে একটি একক, অপরিবর্তনীয় লিঙ্ক থাকে।

ড্রাইভ আইটেমটির ACL মূল্যায়ন করে অ্যাক্সেস নিয়ন্ত্রণ করে। যখন কোনো ব্যবহারকারী একটি লিঙ্ক খোলার চেষ্টা করেন, ড্রাইভ ACL-এর সাথে তার প্রমাণীকৃত পরিচয় যাচাই করে। যদি কোনো অনুমতি বাতিল করা হয় বা তার মেয়াদ শেষ হয়ে যায়, তবে ব্যবহারকারীকে ACL থেকে সরিয়ে দেওয়া হয়। যদি ব্যবহারকারী আবার লিঙ্কটিতে যাওয়ার চেষ্টা করেন, ড্রাইভ অ্যাক্সেস প্রত্যাখ্যান করে।

ফাইলের ক্ষমতা বুঝুন

permissions রিসোর্সটি নির্ধারণ করে কার অ্যাক্সেস থাকবে (ACL), কিন্তু এটি সরাসরি নির্দেশ করে না যে বর্তমান ব্যবহারকারী আপনার অ্যাপ্লিকেশনের UI-তে কোনো নির্দিষ্ট কাজ করতে পারবে কি না।

এর পরিবর্তে, files রিসোর্সটিতে একগুচ্ছ বুলিয়ান capabilities ফিল্ড (যেমন canComment , canShare , বা canDelete ) থাকে, যা গুগল ড্রাইভ এপিআই ব্যবহারকারীর ভূমিকা এবং আইটেম সেটিংসের উপর ভিত্তি করে গতিশীলভাবে গণনা করে।

ফাইল ক্ষমতা পান

আপনার অ্যাপের UI রেন্ডার করার সময়, সরাসরি পারমিশন পার্স করার পরিবর্তে files.capabilities চেক করুন:

  • fields=capabilities সহ files.get মেথডটি কল করুন। আরও তথ্যের জন্য, নির্দিষ্ট ফিল্ড রিটার্ন দেখুন।
  • আপনার ইন্টারফেসে সংশ্লিষ্ট অ্যাকশনগুলো চালু বা বন্ধ করতে ফেরত আসা বুলিয়ান ফ্ল্যাগগুলো ব্যবহার করুন। উদাহরণস্বরূপ, canComment false হলে মন্তব্য করা বন্ধ করে দিন।

ড্রাইভ রিসোর্স শেয়ার করার দৃশ্যকল্প

নিম্নলিখিত সারণিতে বিভিন্ন অবস্থান এবং আইটেমের প্রকারের মধ্যে ড্রাইভ রিসোর্স শেয়ার করার জন্য প্রয়োজনীয় ভূমিকা এবং শর্তাবলী দেখানো হয়েছে:

অবস্থান আইটেম প্রয়োজনীয় ভূমিকা মূল সীমাবদ্ধতা
আমার ড্রাইভ ফাইল বা ফোল্ডার owner বা writer writersCanShare=false হলে owner প্রয়োজন হবে।
ফোল্ডারগুলিতে অ্যাক্সেসের মেয়াদ শেষ করতে reader প্রয়োজন ( মেয়াদ শেষের তারিখ নির্ধারণ দেখুন)।
শেয়ার্ড ড্রাইভ ফাইল organizer , fileOrganizer , বা writer writersCanShare কে সর্বদা true বলে গণ্য করা হয়।
শেয়ার্ড ড্রাইভ ফোল্ডার organizer যদি sharingFoldersRequiresOrganizerPermission false হয়, তাহলেও fileOrganizer শেয়ার করতে পারবে।
শেয়ার্ড ড্রাইভ সদস্যপদ organizer শুধুমাত্র user বা group জন্য প্রযোজ্য (ডোমেইনের জন্য নয়)।

অনুমতি পরিচালনা করুন

নিম্নলিখিত সারণিতে permissions রিসোর্সে উপলব্ধ পদ্ধতিগুলির সারসংক্ষেপ দেওয়া হলো:

পদ্ধতি এপিআই এন্ডপয়েন্ট মূল পরামিতি রেফারেন্স
তৈরি করুন POST https://www.googleapis.com/drive/v3/files/{fileId}/permissions role , type , emailAddress বা domain permissions.create
পান GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} fields permissions.get
তালিকা GET https://www.googleapis.com/drive/v3/files/{fileId}/permissions pageSize , supportsAllDrives , pageToken permissions.list
আপডেট PATCH https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} role , allowFileDiscovery permissions.update
মুছে ফেলুন DELETE https://www.googleapis.com/drive/v3/files/{fileId}/permissions/{permissionId} supportsAllDrives permissions.delete

একটি অনুমতি তৈরি করুন

কোনো ফাইল, ফোল্ডার বা শেয়ার্ড ড্রাইভ শেয়ার করতে, fileId সহ permissions রিসোর্সের ` create মেথডটি কল করুন। একটি পারমিশন তৈরি করলে আইটেমটিতে একটি নতুন ACL এন্ট্রি যুক্ত হয় এবং একটি নির্ধারিত permissionId রিটার্ন করে।

অনুরোধের মূল অংশে নিম্নলিখিত ক্ষেত্রগুলি প্রদান করুন:

  • role : যে প্রবেশাধিকার স্তর প্রদান করতে হবে (উদাহরণস্বরূপ, reader , commenter , বা writer )। সম্পূর্ণ তালিকার জন্য, ভূমিকা ও অনুমতিসমূহ দেখুন।
  • type : অনুদানগ্রহীতার পরিধি ( user , group , domain , বা anyone )।
  • অনুদানগ্রহীতার শনাক্তকারী ( type ভিত্তিতে আবশ্যক):
    • emailAddress : type user বা group হলে আবশ্যক।
    • domain : type domain হলে আবশ্যক।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি পারমিশন তৈরি করতে হয়। প্রতিক্রিয়াটি একটি permissions রিসোর্সের ইনস্ট্যান্স ফেরত দেয়, যার মধ্যে নির্ধারিত permissionId অন্তর্ভুক্ত থাকে।

অনুরোধ

POST https://www.googleapis.com/drive/v3/files/FILE_ID/permissions
{
  "role": "commenter",
  "type": "user",
  "emailAddress": "alex@altostrat.com"
}

প্রতিক্রিয়া

{
  "kind": "drive#permission",
  "id": "PERMISSION_ID",
  "type": "user",
  "role": "commenter"
}

লক্ষ্য দর্শকদের সাথে শেয়ার করুন

টার্গেট অডিয়েন্স হলো বিভিন্ন গোষ্ঠী—যেমন বিভাগ বা দল—যাদেরকে আপনি ব্যবহারকারীদের তাদের আইটেম শেয়ার করার জন্য সুপারিশ করতে পারেন। আপনি ব্যবহারকারীদেরকে আপনার পুরো প্রতিষ্ঠানের পরিবর্তে আরও নির্দিষ্ট বা সীমিত কোনো গোষ্ঠীর সাথে আইটেম শেয়ার করতে উৎসাহিত করতে পারেন। টার্গেট অডিয়েন্স আপনাকে আপনার ডেটার নিরাপত্তা ও গোপনীয়তা উন্নত করতে সাহায্য করে এবং ব্যবহারকারীদের জন্য যথাযথভাবে শেয়ার করা সহজ করে তোলে।

একটি নির্দিষ্ট টার্গেট অডিয়েন্সের সাথে শেয়ার করতে, type=domain সেট করুন এবং domain <TARGET_AUDIENCE_ID>.audience.googledomains.com এ সেট করুন। গুগল অ্যাডমিন কনসোলে টার্গেট অডিয়েন্স খুঁজে বের করা বা তৈরি করার বিষয়ে বিস্তারিত জানতে, ‘টার্গেট অডিয়েন্স সম্পর্কে’ দেখুন।

ব্যবহারকারীরা লক্ষ্য দর্শকদের সাথে কীভাবে যোগাযোগ করে তা দেখতে, লিঙ্ক শেয়ারিংয়ের ব্যবহারকারীর অভিজ্ঞতা দেখুন।

অনুমতি নিন

অনুমতি পেতে, fileId এবং permissionId পাথ প্যারামিটারসহ permissions রিসোর্সের ` get মেথডটি কল করুন। যদি আপনি অনুমতি আইডি না জানেন, তবে প্রথমে সমস্ত অনুমতির তালিকা দেখুন

তালিকার অনুমতি

কোনো ফাইল, ফোল্ডার বা শেয়ার্ড ড্রাইভের অনুমতি তালিকাভুক্ত করতে, প্রয়োজনীয় fileId পাথ প্যারামিটারসহ permissions রিসোর্সের list মেথডটি কল করুন।

রেসপন্সকে পেজিনেট বা ফিল্টার করার জন্য আপনি নিম্নলিখিত যেকোনো ঐচ্ছিক কোয়েরি প্যারামিটার অন্তর্ভুক্ত করতে পারেন:

  • pageSize (ঐচ্ছিক): প্রতি পৃষ্ঠায় ফেরত দেওয়া অনুমতির সর্বোচ্চ সংখ্যা। শেয়ার্ড ড্রাইভে থাকা ফাইলগুলির জন্য এটি সেট করা না থাকলে, সর্বাধিক ১০০টি ফলাফল ফেরত দেওয়া হয়। শেয়ার্ড ড্রাইভে নেই এমন ফাইলগুলির জন্য এটি সেট করা না থাকলে, সম্পূর্ণ তালিকাটি ফেরত দেওয়া হয়।

  • pageToken (ঐচ্ছিক): পরবর্তী পৃষ্ঠাটি আনার জন্য পূর্ববর্তী তালিকা কল থেকে প্রাপ্ত একটি পেজ টোকেন।

  • supportsAllDrives (ঐচ্ছিক): অনুরোধকারী অ্যাপটি My Drive এবং শেয়ার করা ড্রাইভ উভয়কেই সমর্থন করে কিনা।

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

  • includePermissionsForView (ঐচ্ছিক): রেসপন্সে অন্তর্ভুক্ত করার জন্য অতিরিক্ত ভিউ পারমিশন। শুধুমাত্র published সমর্থিত।

  • fields (ঐচ্ছিক): রেসপন্সে ফেরত দেওয়ার জন্য নির্দিষ্ট ফিল্ডসমূহ। ডিফল্টরূপে, list শুধুমাত্র id , type , kind , এবং role ফেরত দেয়। অতিরিক্ত ফিল্ড (যেমন permissionDetails ) ফেরত দেওয়ার জন্য, এই প্যারামিটার ব্যবহার করে সেগুলো নির্দিষ্ট করুন। আরও তথ্যের জন্য, “Return specific fields ” দেখুন।

ভূমিকার উৎস নির্ধারণ করুন

কোনো ফাইল বা ফোল্ডারের ভূমিকা পরিবর্তন করতে হলে, আপনাকে সেই ভূমিকার উৎস জানতে হবে। শেয়ার্ড ড্রাইভের ক্ষেত্রে, ভূমিকার উৎস হতে পারে শেয়ার্ড ড্রাইভের সদস্যপদ, কোনো ফোল্ডারের ভূমিকা, অথবা কোনো ফাইলের ভূমিকা।

একটি শেয়ার্ড ড্রাইভ বা তার ভেতরের আইটেমগুলোর জন্য রোল সোর্স নির্ধারণ করতে, fileIdpermissionId পাথ প্যারামিটার এবং fields প্যারামিটারটিকে permissionDetails ফিল্ডে সেট করে permissions রিসোর্সের ` get মেথডটি কল করুন।

permissionId খুঁজে পেতে, permissions রিসোর্সের list মেথডটি fileId পাথ প্যারামিটারসহ ব্যবহার করুন। list রিকোয়েস্টে permissionDetails ফিল্ডটি পেতে, fields প্যারামিটারটি permissions/permissionDetails এ সেট করুন।

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

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে রোলের উৎস নির্ধারণ করতে হয়। প্রতিক্রিয়াটি একটি permissions রিসোর্সের permissionDetails ফেরত দেয়। inheritedFrom ফিল্ডটি সেই আইটেমের আইডি প্রদান করে যেখান থেকে পারমিশনটি উত্তরাধিকারসূত্রে প্রাপ্ত হয়েছে।

অনুরোধ

GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID?fields=permissionDetails&supportsAllDrives=true

প্রতিক্রিয়া

{
  "permissionDetails": [
    {
      "permissionType": "member",
      "role": "commenter",
      "inheritedFrom": "INHERITED_FROM_ID",
      "inherited": true
    },
    {
      "permissionType": "file",
      "role": "writer",
      "inherited": false
    }
  ]
}

একটি অনুমতি আপডেট করুন

কোনো ফাইল বা ফোল্ডারের অনুমতি আপডেট করতে, আপনি নির্ধারিত রোলটি পরিবর্তন করতে পারেন। রোলের উৎস খুঁজে বের করার বিষয়ে আরও তথ্যের জন্য, “রোলের উৎস নির্ধারণ করুন” দেখুন।

  1. permissions রিসোর্সের update মেথডটি কল করুন, যেখানে fileId পাথ প্যারামিটারটি সংশ্লিষ্ট ফাইল, ফোল্ডার বা শেয়ার্ড ড্রাইভে এবং permissionId পাথ প্যারামিটারটি পরিবর্তন করার পারমিশনে সেট করা থাকবে। permissionId খুঁজে বের করার জন্য, permissions রিসোর্সের list মেথডটি fileId পাথ প্যারামিটারসহ ব্যবহার করুন।

  2. অনুরোধপত্রে নতুন role চিহ্নিত করুন।

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

আপনি প্যাচ সেম্যান্টিকসের মাধ্যমে আপডেট প্রয়োগ করতে পারেন, অর্থাৎ আপনি একটি রিসোর্সে আংশিক পরিবর্তন করতে পারেন। আপনার অনুরোধে যে ফিল্ডগুলো আপনি পরিবর্তন করতে চান, সেগুলো আপনাকে অবশ্যই স্পষ্টভাবে উল্লেখ করতে হবে। অনুরোধে অন্তর্ভুক্ত নয় এমন ফিল্ডগুলো তাদের বিদ্যমান মান ধরে রাখে। আরও তথ্যের জন্য, ‘আংশিক রিসোর্স নিয়ে কাজ করা’ দেখুন।

ভূমিকা পরিবর্তনের পাশাপাশি, পারমিশন type domain বা anyone হলে আপনি কোনো আইটেমের ডিসকভারেবিলিটিও পরিবর্তন করতে পারেন। একটি শেয়ার করা ফাইলকে সার্চযোগ্য বা তালিকা থেকে বাদ দিতে, আপনার প্যাচ রিকোয়েস্টে allowFileDiscovery বুলিয়ান ফিল্ডটি অন্তর্ভুক্ত করুন। এটিকে ` true সেট করলে, নির্দিষ্ট অডিয়েন্সের জন্য আইটেমটি সার্চ রেজাল্টে প্রদর্শিত হবে, এমনকি তাদের সরাসরি লিঙ্ক না দেওয়া হলেও। এই সেটিংটি পরিবর্তন করার জন্য আপনাকে পারমিশনটি ডিলিট করে আবার তৈরি করার প্রয়োজন নেই।

নিম্নলিখিত কোড নমুনাটি দেখায় কিভাবে একটি ফাইল বা ফোল্ডারের অনুমতি commenter থেকে writer এ পরিবর্তন করতে হয়। প্রতিক্রিয়াটি একটি permissions রিসোর্স'-এর ইনস্ট্যান্স ফেরত দেয়।

অনুরোধ

PATCH https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID
{
  "role": "writer"
}

প্রতিক্রিয়া

{
  "kind": "drive#permission",
  "id": "PERMISSION_ID",
  "type": "user",
  "role": "writer"
}

ব্যাচ অনুরোধের মাধ্যমে একাধিক অনুমতি আপডেট করুন

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

Drive একটি আইটেমের অনুমতিসমূহকে একটি একক ACL হিসেবে মূল্যায়ন ও আপডেট করে। একই সাথে একাধিক অপারেশন ঘটলে রেস কন্ডিশন তৈরি হয়, যেখানে "শেষ লেখাটিই জয়ী হয়" (last write wins), যা নীরবে অনুমতির পরিবর্তনগুলোকে ওভাররাইট করে দিতে পারে অথবা sharingRateLimitExceeded ত্রুটি সৃষ্টি করতে পারে।

বিরোধ এড়াতে, একই আইটেমের অনুমতি পরিবর্তনগুলো ক্রমানুসারে সম্পাদন করুন, অথবা একটি অনুরোধেই একাধিক অনুমতি পরিবর্তন করতে ব্যাচ রিকোয়েস্ট ব্যবহার করুন।

নিম্নলিখিতটি একটি ক্লায়েন্ট লাইব্রেরির অনুমতি একসাথে একাধিকবার পরিবর্তনের একটি উদাহরণ।

জাভা

drive/snippets/drive_v3/src/main/java/ShareFile.java
import com.google.api.client.googleapis.batch.BatchRequest;
import com.google.api.client.googleapis.batch.json.JsonBatchCallback;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpHeaders;
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.Drive;
import com.google.api.services.drive.DriveScopes;
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 modify permissions. */
public class ShareFile {

  /**
   * Batch permission modification.
   * realFileId file Id.
   * realUser User Id.
   * realDomain Domain of the user ID.
   *
   * @return list of modified permissions if successful, {@code null} otherwise.
   * @throws IOException if service account credentials file not found.
   */
  public static List<String> shareFile(String realFileId, String realUser, String realDomain)
      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.application*/
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(DriveScopes.DRIVE_FILE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

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

    final List<String> ids = new ArrayList<String>();


    JsonBatchCallback<Permission> callback = new JsonBatchCallback<Permission>() {
      @Override
      public void onFailure(GoogleJsonError e,
                            HttpHeaders responseHeaders)
          throws IOException {
        // Handle error
        System.err.println(e.getMessage());
      }

      @Override
      public void onSuccess(Permission permission,
                            HttpHeaders responseHeaders)
          throws IOException {
        System.out.println("Permission ID: " + permission.getId());

        ids.add(permission.getId());

      }
    };
    BatchRequest batch = service.batch();
    Permission userPermission = new Permission()
        .setType("user")
        .setRole("writer");

    userPermission.setEmailAddress(realUser);
    try {
      service.permissions().create(realFileId, userPermission)
          .setFields("id")
          .queue(batch, callback);

      Permission domainPermission = new Permission()
          .setType("domain")
          .setRole("reader");

      domainPermission.setDomain(realDomain);

      service.permissions().create(realFileId, domainPermission)
          .setFields("id")
          .queue(batch, callback);

      batch.execute();

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

পাইথন

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


def share_file(real_file_id, real_user, real_domain):
  """Batch permission modification.
  Args:
      real_file_id: file Id
      real_user: User ID
      real_domain: Domain of the user ID
  Prints modified permissions

  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)
    ids = []
    file_id = real_file_id

    def callback(request_id, response, exception):
      if exception:
        # Handle error
        print(exception)
      else:
        print(f"Request_Id: {request_id}")
        print(f'Permission Id: {response.get("id")}')
        ids.append(response.get("id"))

    # pylint: disable=maybe-no-member
    batch = service.new_batch_http_request(callback=callback)
    user_permission = {
        "type": "user",
        "role": "writer",
        "emailAddress": "user@example.com",
    }
    batch.add(
        service.permissions().create(
            fileId=file_id,
            body=user_permission,
            fields="id",
        )
    )
    domain_permission = {
        "type": "domain",
        "role": "reader",
        "domain": "example.com",
    }
    domain_permission["domain"] = real_domain
    batch.add(
        service.permissions().create(
            fileId=file_id,
            body=domain_permission,
            fields="id",
        )
    )
    batch.execute()

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

  return ids


if __name__ == "__main__":
  share_file(
      real_file_id="1dUiRSoAQKkM3a4nTPeNQWgiuau1KdQ_l",
      real_user="gduser1@workspacesamples.dev",
      real_domain="workspacesamples.dev",
  )

নোড.জেএস

drive/snippets/drive_v3/file_snippets/share_file.js
import {GoogleAuth} from 'google-auth-library';
import {google} from 'googleapis';

/**
 * Shares a file with a user and a domain.
 * @param {string} fileId The ID of the file to share.
 * @param {string} targetUserEmail The email address of the user to share with.
 * @param {string} targetDomainName The domain to share with.
 * @return {Promise<Array<string>>} A promise that resolves to an array of permission IDs.
 */
async function shareFile(fileId, targetUserEmail, targetDomainName) {
  // 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});

  /** @type {Array<string>} */
  const permissionIds = [];

  // The permissions to create.
  const permissions = [
    {
      type: 'user',
      role: 'writer',
      emailAddress: targetUserEmail, // e.g., 'user@partner.com'
    },
    {
      type: 'domain',
      role: 'writer',
      domain: targetDomainName, // e.g., 'example.com'
    },
  ];

  // Iterate through the permissions and create them one by one.
  for (const permission of permissions) {
    const result = await service.permissions.create({
      requestBody: permission,
      fileId,
      fields: 'id',
    });

    if (result.data.id) {
      permissionIds.push(result.data.id);
      console.log(`Inserted permission id: ${result.data.id}`);
    } else {
      throw new Error('Failed to create permission');
    }
  }
  return permissionIds;
}

পিএইচপি

drive/snippets/drive_v3/src/DriveShareFile.php
<?php
use Google\Client;
use Google\Service\Drive;
function shareFile()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);
        $realFileId = readline("Enter File Id: ");
        $realUser = readline("Enter user email address: ");
        $realDomain = readline("Enter domain name: ");
        $ids = array();
            $fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
            $fileId = $realFileId;
            $driveService->getClient()->setUseBatch(true);
            try {
                $batch = $driveService->createBatch();

                $userPermission = new Drive\Permission(array(
                    'type' => 'user',
                    'role' => 'writer',
                    'emailAddress' => 'user@example.com'
                ));
                $userPermission['emailAddress'] = $realUser;
                $request = $driveService->permissions->create(
                    $fileId, $userPermission, array('fields' => 'id'));
                $batch->add($request, 'user');
                $domainPermission = new Drive\Permission(array(
                    'type' => 'domain',
                    'role' => 'reader',
                    'domain' => 'example.com'
                ));
                $userPermission['domain'] = $realDomain;
                $request = $driveService->permissions->create(
                    $fileId, $domainPermission, array('fields' => 'id'));
                $batch->add($request, 'domain');
                $results = $batch->execute();

                foreach ($results as $result) {
                    if ($result instanceof Google_Service_Exception) {
                        // Handle error
                        printf($result);
                    } else {
                        printf("Permission ID: %s\n", $result->id);
                        array_push($ids, $result->id);
                    }
                }
            } finally {
                $driveService->getClient()->setUseBatch(false);
            }
            return $ids;
    } catch(Exception $e) {
        echo "Error Message: ".$e;
    }

}

.NET

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

namespace DriveV3Snippets
{
    // Class to demonstrate use-case of Drive modify permissions.
    public class ShareFile
    {
        /// <summary>
        /// Batch permission modification.
        /// </summary>
        /// <param name="realFileId">File id.</param>
        /// <param name="realUser">User id.</param>
        /// <param name="realDomain">Domain id.</param>
        /// <returns>list of modified permissions, null otherwise.</returns>
        public static IList<String> DriveShareFile(string realFileId, string realUser, string realDomain)
        {
            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 ids = new List<String>();
                var batch = new BatchRequest(service);
                BatchRequest.OnResponse<Permission> callback = delegate(
                    Permission permission,
                    RequestError error,
                    int index,
                    HttpResponseMessage message)
                {
                    if (error != null)
                    {
                        // Handle error
                        Console.WriteLine(error.Message);
                    }
                    else
                    {
                        Console.WriteLine("Permission ID: " + permission.Id);
                    }
                };
                Permission userPermission = new Permission()
                {
                    Type = "user",
                    Role = "writer",
                    EmailAddress = realUser
                };

                var request = service.Permissions.Create(userPermission, realFileId);
                request.Fields = "id";
                batch.Queue(request, callback);

                Permission domainPermission = new Permission()
                {
                    Type = "domain",
                    Role = "reader",
                    Domain = realDomain
                };
                request = service.Permissions.Create(domainPermission, realFileId);
                request.Fields = "id";
                batch.Queue(request, callback);
                var task = batch.ExecuteAsync();
                task.Wait();
                return ids;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

একটি অনুমতি মুছে ফেলুন

কোনো ফাইল বা ফোল্ডারের অ্যাক্সেস প্রত্যাহার করতে, fileId এবং permissionId পাথ প্যারামিটারসহ permissions রিসোর্সের ` delete মেথডটি কল করুন।

চাইল্ড আইটেমগুলিতে উত্তরাধিকারসূত্রে প্রাপ্ত অনুমতি সরাসরি প্রত্যাহার করা যায় না। এর পরিবর্তে প্যারেন্ট ফোল্ডারের অনুমতি আপডেট বা ডিলিট করুন (অথবা সীমিত অ্যাক্সেস সেটিং ব্যবহার করুন)।

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

একটি মেয়াদ শেষ হওয়ার তারিখ নির্ধারণ করুন

কোনো ফাইল বা ফোল্ডারে অস্থায়ী অ্যাক্সেস দেওয়ার জন্য, create বা update মেথড কল করার সময় expirationTime ফিল্ডটি ( RFC 3339 তারিখ-সময় ) সেট করুন।

মেয়াদ শেষ হওয়ার সময়সীমার ক্ষেত্রে নিম্নলিখিত সীমাবদ্ধতাগুলো রয়েছে:

  • শুধুমাত্র user এবং group অনুমতিতে সেট করা যাবে ( domain বা anyone নয়)।
  • সময়টি অবশ্যই ভবিষ্যতের হতে হবে, সর্বোচ্চ এক বছর পর্যন্ত।
  • ফোল্ডারের ক্ষেত্রে, শুধুমাত্র reader রোলের মাধ্যমেই অস্থায়ী অ্যাক্সেস সমর্থিত।