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

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

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

ড্রাইভ সম্পদ শেয়ার করার জন্য দৃশ্যকল্প

পাঁচটি ভিন্ন ধরনের শেয়ারিং পরিস্থিতি রয়েছে:

  1. আমার ড্রাইভে একটি ফাইল শেয়ার করতে, ব্যবহারকারীর অবশ্যই role=writer বা role=owner থাকতে হবে।

  2. আমার ড্রাইভে একটি ফোল্ডার শেয়ার করতে, ব্যবহারকারীর অবশ্যই role=writer বা role=owner থাকতে হবে।

  3. একটি শেয়ার্ড ড্রাইভে একটি ফাইল শেয়ার করতে, ব্যবহারকারীর অবশ্যই role=writer , role=fileOrganizer , অথবা role=organizer থাকতে হবে।

    • writersCanShare সেটিং শেয়ার্ড ড্রাইভের আইটেমের ক্ষেত্রে প্রযোজ্য নয়। এটাকে সবসময় true বলে মনে করা হয়।
  4. একটি শেয়ার্ড ড্রাইভে একটি ফোল্ডার ভাগ করতে, ব্যবহারকারীর অবশ্যই role=organizer থাকতে হবে।

    • শেয়ার্ড ড্রাইভে sharingFoldersRequiresOrganizerPermission সীমাবদ্ধতা false সেট করা থাকলে, role=fileOrganizer এর ব্যবহারকারীরা সেই শেয়ার্ড ড্রাইভে ফোল্ডার শেয়ার করতে পারবেন।
  5. শেয়ার্ড ড্রাইভ মেম্বারশিপ পরিচালনা করতে, ব্যবহারকারীর অবশ্যই role=organizer থাকতে হবে। শুধুমাত্র ব্যবহারকারী এবং গ্রুপ শেয়ার্ড ড্রাইভের সদস্য হতে পারেন।

ফাইল অ্যাক্সেস সীমিত করতে একটি মেয়াদ শেষ হওয়ার তারিখ সেট করুন

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

মেয়াদ শেষ হওয়ার তারিখ সেট করতে:

  • permissions সম্পদে create() পদ্ধতি ব্যবহার করুন এবং expirationTime ক্ষেত্র সেট করুন (অন্যান্য প্রয়োজনীয় ক্ষেত্রগুলির সাথে)। আরও তথ্যের জন্য, একটি অনুমতি তৈরি করুন দেখুন।

  • permissions সম্পদে update() পদ্ধতি ব্যবহার করুন এবং expirationTime ক্ষেত্র সেট করুন (অন্যান্য প্রয়োজনীয় ক্ষেত্রগুলির সাথে)। আরও তথ্যের জন্য, অনুমতি পরিবর্তন করুন দেখুন।

expirationTime ক্ষেত্রটি নির্দেশ করে যখন RFC 3339 তারিখ-সময় ব্যবহার করে অনুমতির মেয়াদ শেষ হয়। মেয়াদ শেষ হওয়ার সময় নিম্নলিখিত সীমাবদ্ধতা আছে:

  • এগুলি শুধুমাত্র ব্যবহারকারী এবং গোষ্ঠীর অনুমতিগুলিতে সেট করা যেতে পারে।
  • সময় ভবিষ্যতে হতে হবে.
  • সময় ভবিষ্যতে এক বছরের বেশি হতে পারে না।

মেয়াদ শেষ হওয়ার তারিখ সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত নিবন্ধগুলি দেখুন:

অনুমতি প্রচার

একটি ফোল্ডারের জন্য অনুমতি তালিকা নীচের দিকে প্রচারিত হয়, এবং সমস্ত চাইল্ড ফাইল এবং ফোল্ডারগুলি পিতামাতার কাছ থেকে অনুমতি পায়৷ যখনই অনুমতি বা অনুক্রম পরিবর্তন করা হয়, সমস্ত নেস্টেড ফোল্ডারের মাধ্যমে প্রচারটি পুনরাবৃত্তিমূলকভাবে ঘটে। উদাহরণস্বরূপ, যদি একটি ফোল্ডারে একটি ফাইল বিদ্যমান থাকে এবং সেই ফোল্ডারটি অন্য ফোল্ডারের মধ্যে সরানো হয়, নতুন ফোল্ডারের অনুমতিগুলি ফাইলটিতে প্রচারিত হয়। যদি নতুন ফোল্ডারটি ফাইলের ব্যবহারকারীকে একটি নতুন ভূমিকা দেয়, যেমন "লেখক", এটি তাদের পুরানো ভূমিকাকে ওভাররাইড করে।

বিপরীতভাবে, যদি একটি ফাইল একটি ফোল্ডার থেকে role=writer উত্তরাধিকারসূত্রে প্রাপ্ত হয়, এবং একটি "রিডার" ভূমিকা প্রদান করে এমন অন্য ফোল্ডারে স্থানান্তরিত হয়, ফাইলটি এখন role=reader উত্তরাধিকারী হয়।

শেয়ার্ড ড্রাইভের কোনো ফাইল বা ফোল্ডার থেকে উত্তরাধিকারসূত্রে পাওয়া অনুমতি সরানো যাবে না। পরিবর্তে এই অনুমতিগুলি অবশ্যই প্রত্যক্ষ বা পরোক্ষ পিতামাতার উপর সামঞ্জস্য করতে হবে যার কাছ থেকে তারা উত্তরাধিকারসূত্রে প্রাপ্ত হয়েছিল৷ উত্তরাধিকারসূত্রে প্রাপ্ত অনুমতিগুলি "আমার ড্রাইভ" বা "আমার সাথে ভাগ করা" এর অধীনে থাকা আইটেমগুলি থেকে সরানো যেতে পারে৷

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

ক্ষমতা

permissions সম্পদ শেষ পর্যন্ত বর্তমান ব্যবহারকারীর একটি ফাইল বা ফোল্ডারে ক্রিয়া সম্পাদন করার ক্ষমতা নির্ধারণ করে না। পরিবর্তে, files রিসোর্সে বুলিয়ান capabilities ক্ষেত্রগুলির একটি সংগ্রহ রয়েছে যা একটি ফাইল বা ফোল্ডারে একটি ক্রিয়া সম্পাদন করা যেতে পারে কিনা তা নির্দেশ করতে ব্যবহৃত হয়। Google ড্রাইভ API ফাইল বা ফোল্ডারের সাথে যুক্ত বর্তমান ব্যবহারকারীর অনুমতি সম্পদের উপর ভিত্তি করে এই ক্ষেত্রগুলি সেট করে৷

উদাহরণস্বরূপ, যখন অ্যালেক্স আপনার অ্যাপে লগ ইন করে এবং একটি ফাইল শেয়ার করার চেষ্টা করে, তখন অ্যালেক্সের ভূমিকা ফাইলটিতে অনুমতির জন্য চেক করা হয়। যদি ভূমিকা তাদের একটি ফাইল শেয়ার করার অনুমতি দেয়, তাহলে ফাইলের সাথে সম্পর্কিত capabilities , যেমন canShare , ভূমিকার সাপেক্ষে পূর্ণ হয়। অ্যালেক্স ফাইল শেয়ার করতে চাইলে, canShare true সেট করা হয়েছে তা নিশ্চিত করতে আপনার অ্যাপটি capabilities পরীক্ষা করে।

ফাইলের capabilities পুনরুদ্ধারের উদাহরণের জন্য, ব্যবহারকারীর অনুমতি যাচাই করুন দেখুন।

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

একটি অনুমতি তৈরি করার সময় নিম্নলিখিত দুটি ক্ষেত্র প্রয়োজনীয়:

  • type : type অনুমতির সুযোগ চিহ্নিত করে ( user , group , domain , বা anyone )। type=user সহ একটি অনুমতি একটি নির্দিষ্ট ব্যবহারকারীর জন্য প্রযোজ্য যেখানে type=domain সহ একটি অনুমতি একটি নির্দিষ্ট ডোমেনের প্রত্যেকের জন্য প্রযোজ্য।

  • role : role ক্ষেত্রটি type সম্পাদন করতে পারে এমন ক্রিয়াকলাপগুলি সনাক্ত করে। উদাহরণস্বরূপ, type=user এবং role=reader সহ একটি অনুমতি একটি নির্দিষ্ট ব্যবহারকারীকে ফাইল বা ফোল্ডারে শুধুমাত্র-পঠন অ্যাক্সেস প্রদান করে। অথবা, type=domain এবং role=commenter সহ একটি অনুমতি ডোমেনের প্রত্যেককে একটি ফাইলে মন্তব্য যোগ করতে দেয়। ভূমিকার একটি সম্পূর্ণ তালিকা এবং প্রতিটি দ্বারা অনুমোদিত ক্রিয়াকলাপগুলির জন্য, ভূমিকা এবং অনুমতিগুলি পড়ুন৷

আপনি যখন একটি অনুমতি তৈরি করেন যেখানে type=user বা type=group , আপনাকে অবশ্যই একটি emailAddress প্রদান করতে হবে যাতে নির্দিষ্ট ব্যবহারকারী বা গোষ্ঠীকে অনুমতির সাথে সংযুক্ত করা যায়।

আপনি যখন একটি অনুমতি তৈরি করেন যেখানে type=domain , আপনাকে একটি নির্দিষ্ট ডোমেনকে অনুমতির সাথে সংযুক্ত করার জন্য একটি domain প্রদান করতে হবে।

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

  1. সংশ্লিষ্ট ফাইল বা ফোল্ডারের জন্য fileId পাথ প্যারামিটার সহ create() পদ্ধতি ব্যবহার করুন।
  2. অনুরোধের অংশে, type এবং role উল্লেখ করুন।
  3. যদি type=user বা type=group , তাহলে একটি emailAddress প্রদান করুন। যদি type=domain হয়, একটি domain প্রদান করুন।

একটি উদাহরণ দেখান

নিম্নলিখিত কোড নমুনা একটি অনুমতি কিভাবে তৈরি করতে দেখায়. প্রতিক্রিয়াটি একটি Permission সংস্থানের একটি উদাহরণ প্রদান করে, যার মধ্যে নির্ধারিত permissionId রয়েছে।

অনুরোধ

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

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

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

টার্গেট অডিয়েন্স ব্যবহার করুন

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

লক্ষ্য শ্রোতা ব্যবহার করতে:

  1. Google অ্যাডমিন কনসোলে, মেনু > ডিরেক্টরি > টার্গেট অডিয়েন্সে যান।

    টার্গেট অডিয়েন্সে যান

    এই কাজের জন্য আপনাকে সুপার অ্যাডমিনিস্ট্রেটর বিশেষাধিকার সহ একটি অ্যাকাউন্ট ব্যবহার করে সাইন ইন করতে হবে।

  2. টার্গেট অডিয়েন্স লিস্টে , টার্গেট অডিয়েন্সের নামে ক্লিক করুন। একটি লক্ষ্য দর্শক তৈরি করতে, একটি লক্ষ্য দর্শক তৈরি করুন দেখুন

  3. টার্গেট অডিয়েন্স URL থেকে অনন্য আইডি কপি করুন: https://admin.google.com/ac/targetaudiences/ ID

  4. type=domain দিয়ে একটি অনুমতি তৈরি করুন এবং domain ক্ষেত্রটিকে ID .audience.googledomains.com এ সেট করুন।

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

একটি ফাইল, ফোল্ডার বা শেয়ার্ড ড্রাইভের জন্য সমস্ত অনুমতি পুনরুদ্ধার করুন

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

একটি উদাহরণ দেখান

নিম্নলিখিত কোড নমুনা দেখায় কিভাবে সব অনুমতি পেতে. প্রতিক্রিয়া অনুমতিগুলির একটি তালিকা প্রদান করে।

অনুরোধ

GET https://www.googleapis.com/drive/v3/files/FILE_ID/permissions

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

{
  "kind": "drive#permissionList",
  "permissions": [
    {
      "id": "PERMISSION_ID",
      "type": "user",
      "kind": "drive#permission",
      "role": "commenter"
    }
  ]
}

ব্যবহারকারীর অনুমতি যাচাই করুন

যখন আপনার অ্যাপ একটি ফাইল খোলে, তখন এটি ফাইলের ক্ষমতা পরীক্ষা করে এবং বর্তমান ব্যবহারকারীর অনুমতিগুলি প্রতিফলিত করার জন্য UI রেন্ডার করে। উদাহরণস্বরূপ, যদি ব্যবহারকারীর ফাইলটিতে canComment ক্ষমতা না থাকে, তাহলে UI-তে মন্তব্য করার ক্ষমতা অক্ষম করা উচিত।

capabilities সম্পর্কে আরও তথ্যের জন্য, সক্ষমতা বিভাগটি দেখুন।

সক্ষমতা পরীক্ষা করতে, fileId পাথ প্যারামিটার সহ files রিসোর্সে get() পদ্ধতিতে কল করুন এবং capabilities ক্ষেত্রে সেট করা fields প্যারামিটার। fields প্যারামিটার ব্যবহার করে ক্ষেত্র ফেরত দেওয়ার বিষয়ে আরও তথ্যের জন্য, একটি ফাইলের জন্য নির্দিষ্ট ক্ষেত্র ফেরত দেখুন।

একটি উদাহরণ দেখান

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

অনুরোধ

GET https://www.googleapis.com/drive/v3/files/FILE_ID?fields=capabilities

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

{
  "capabilities": {
    "canAcceptOwnership": false,
    "canAddChildren": false,
    "canAddMyDriveParent": false,
    "canChangeCopyRequiresWriterPermission": true,
    "canChangeSecurityUpdateEnabled": false,
    "canComment": true,
    "canCopy": true,
    "canDelete": true,
    "canDownload": true,
    "canEdit": true,
    "canListChildren": false,
    "canModifyContent": true,
    "canModifyContentRestriction": true,
    "canModifyLabels": true,
    "canMoveChildrenWithinDrive": false,
    "canMoveItemOutOfDrive": true,
    "canMoveItemWithinDrive": true,
    "canReadLabels": true,
    "canReadRevisions": true,
    "canRemoveChildren": false,
    "canRemoveMyDriveParent": true,
    "canRename": true,
    "canShare": true,
    "canTrash": true,
    "canUntrash": true
  }
}

শেয়ার্ড ড্রাইভ ফাইল এবং ফোল্ডারগুলির জন্য ভূমিকা উৎস নির্ধারণ করুন

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

একটি শেয়ার্ড ড্রাইভ বা সেই ড্রাইভের মধ্যে আইটেমগুলির জন্য ভূমিকার উত্স নির্ধারণ করতে, fileId এবং permissionId পাথ প্যারামিটার সহ permissions সংস্থানে get() পদ্ধতিতে কল করুন এবং permissionDetails ক্ষেত্রে সেট করা fields পরামিতি।

permissionId খুঁজে পেতে, fileId পাথ প্যারামিটার সহ permissions সম্পদে list() পদ্ধতি ব্যবহার করুন। 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() পদ্ধতিতে কল করুন যাতে permissionId পাথ প্যারামিটার পরিবর্তনের অনুমতিতে সেট করা হয় এবং fileId পাথ প্যারামিটারটি সংশ্লিষ্ট ফাইল, ফোল্ডার বা শেয়ার্ড ড্রাইভে সেট করা হয়। permissionId খুঁজে পেতে, fileId পাথ প্যারামিটার সহ permissions সম্পদে list() পদ্ধতি ব্যবহার করুন।

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

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

একটি উদাহরণ দেখান

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

অনুরোধ

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

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

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

মুলতুবি অ্যাক্সেস প্রস্তাব তালিকা এবং সমাধান

একটি অ্যাক্সেস প্রস্তাব হল একটি অনুরোধকারীর কাছ থেকে একটি ড্রাইভ আইটেমে প্রাপককে অ্যাক্সেস দেওয়ার জন্য একটি অনুমোদনকারীর কাছে একটি প্রস্তাব৷

একজন অনুমোদনকারী ড্রাইভ ফাইল জুড়ে সমস্ত অমীমাংসিত অ্যাক্সেস প্রস্তাব পর্যালোচনা এবং কাজ করতে পারে৷ এর অর্থ হল আপনি প্রোগ্রাম্যাটিকভাবে অ্যাক্সেস প্রস্তাবগুলির জন্য অনুসন্ধান করে এবং তারপরে সেগুলি সমাধান করে অনুমোদনের প্রক্রিয়াটিকে দ্রুততর করতে পারেন৷ এটি একটি অনুমোদনকারী দ্বারা প্রস্তাবগুলিকে সামগ্রিকভাবে দেখার অনুমতি দেয়।

ড্রাইভ এপিআই accessproposals সংস্থান সরবরাহ করে যাতে আপনি মুলতুবি থাকা অ্যাক্সেস প্রস্তাবগুলি দেখতে এবং সমাধান করতে পারেন৷ accessproposals রিসোর্সের পদ্ধতিগুলি ফাইল, ফোল্ডার, শেয়ার্ড ড্রাইভের মধ্যে থাকা ফাইলগুলিতে কাজ করে কিন্তু শেয়ার্ড ড্রাইভে নয়

নিম্নলিখিত শর্তাদি প্রস্তাবগুলি অ্যাক্সেস করার জন্য নির্দিষ্ট:

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

মুলতুবি অ্যাক্সেস প্রস্তাব তালিকা

একটি ড্রাইভ আইটেমে সমস্ত মুলতুবি থাকা অ্যাক্সেস প্রস্তাবগুলি তালিকাভুক্ত করতে, accessproposals রিসোর্সে list() পদ্ধতিতে কল করুন এবং fileId পাথ প্যারামিটার অন্তর্ভুক্ত করুন।

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

রেসপন্স বডিতে একটি AccessProposal অবজেক্ট থাকে যা ফাইলে অমীমাংসিত অ্যাক্সেস প্রস্তাবগুলির একটি তালিকা উপস্থাপন করে।

AccessProposal অবজেক্টে প্রতিটি প্রস্তাবের তথ্য যেমন অনুরোধকারী, প্রাপক এবং অনুরোধকারী যোগ করা বার্তা অন্তর্ভুক্ত করে। এটিতে একটি AccessProposalRoleAndView অবজেক্টও রয়েছে যা একটি view সহ অনুরোধকারীর প্রস্তাবিত role গ্রুপ করে। যেহেতু role একটি পুনরাবৃত্ত ক্ষেত্র, তাই প্রতিটি প্রস্তাবের জন্য গুণিতক থাকতে পারে। উদাহরণ স্বরূপ, একটি প্রস্তাবে role=reader এবং view=published এর একটি AccessProposalRoleAndView অবজেক্ট থাকতে পারে, সাথে একটি অতিরিক্ত AccessProposalRoleAndView অবজেক্ট থাকতে পারে যার শুধুমাত্র role=writer মান রয়েছে। আরও তথ্যের জন্য, ভিউ দেখুন।

পেজিনেশন কাস্টমাইজ করতে, বা ফিল্টার করার জন্য, প্রস্তাবগুলি অ্যাক্সেস করতে নিম্নলিখিত ক্যোয়ারী প্যারামিটারগুলি পাস করুন:

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

  • pageSize : প্রতি পৃষ্ঠায় ফেরত দেওয়ার জন্য সর্বাধিক সংখ্যক অ্যাক্সেস প্রস্তাব।

মুলতুবি অ্যাক্সেস প্রস্তাব সমাধান

একটি ড্রাইভ আইটেমের সমস্ত মুলতুবি থাকা অ্যাক্সেস প্রস্তাবগুলি সমাধান করতে, accessproposals রিসোর্সে resolve() পদ্ধতিতে কল করুন এবং fileId এবং proposalId পাথ প্যারামিটারগুলি অন্তর্ভুক্ত করুন।

resolve() পদ্ধতিতে একটি action ক্যোয়ারী প্যারামিটার রয়েছে যা প্রস্তাবে নেওয়ার পদক্ষেপকে বোঝায়। Action অবজেক্ট প্রস্তাবটির রাষ্ট্রীয় পরিবর্তনকে ট্র্যাক করে যাতে আমরা জানি যে এটি গ্রহণ করা হচ্ছে বা অস্বীকার করা হচ্ছে।

resolve() পদ্ধতিতে role এবং view ঐচ্ছিক ক্যোয়ারী প্যারামিটারও অন্তর্ভুক্ত রয়েছে। শুধুমাত্র সমর্থিত ভূমিকা হল writer , commenter এবং reader । ভূমিকা নির্দিষ্ট না থাকলে, এটি reader কাছে ডিফল্ট। send_notification এর একটি অতিরিক্ত ঐচ্ছিক ক্যোয়ারী প্যারামিটার আপনাকে অনুরোধকারীকে একটি ইমেল বিজ্ঞপ্তি পাঠাতে দেয় যখন প্রস্তাবটি গৃহীত বা অস্বীকার করা হয়।

list() পদ্ধতির মতোই, প্রস্তাবটি সমাধানকারী ব্যবহারকারীদের ফাইলে can_approve_access_proposals সক্ষমতা থাকতে হবে। capabilities সম্পর্কে আরও তথ্যের জন্য, সক্ষমতা বিভাগটি দেখুন।

ড্রাইভ সংস্থান ভাগ করার জন্য দৃশ্যের অধীনে তালিকাভুক্ত একই নিদর্শনগুলি ব্যবহার করে প্রস্তাবগুলি সমাধান করা হয়৷ যদি একই ব্যবহারকারীর জন্য একাধিক প্রস্তাব থাকে, কিন্তু ভিন্ন ভূমিকা সহ, নিম্নলিখিতগুলি প্রযোজ্য:

  • যদি একটি প্রস্তাব গৃহীত হয় এবং একটি প্রত্যাখ্যান করা হয়, গৃহীত ভূমিকা ড্রাইভ আইটেমের ক্ষেত্রে প্রযোজ্য।
  • উভয় প্রস্তাব একই সময়ে গৃহীত হলে, উচ্চতর অনুমতি সহ প্রস্তাবটি প্রয়োগ করা হয় (উদাহরণস্বরূপ, role=writer বনাম role=reader )। অন্যান্য অ্যাক্সেস প্রস্তাব আইটেম থেকে সরানো হয়.

resolve() পদ্ধতিতে একটি প্রস্তাব পাঠানোর পরে, ভাগ করে নেওয়ার কাজটি সম্পূর্ণ হয়। AccessProposal আর list() পদ্ধতির মাধ্যমে ফেরত দেওয়া হয় না। একবার প্রস্তাবটি গৃহীত হলে, ব্যবহারকারীকে অবশ্যই একটি ফাইল বা ফোল্ডারে অনুমতি আপডেট করতে permissions সংগ্রহ ব্যবহার করতে হবে। আরও তথ্যের জন্য, অনুমতি পরিবর্তন বিভাগটি দেখুন।

একটি ফাইল বা ফোল্ডার অ্যাক্সেস প্রত্যাহার করুন

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

"আমার ড্রাইভ"-এর আইটেমগুলির জন্য উত্তরাধিকারসূত্রে প্রাপ্ত অনুমতি মুছে ফেলা সম্ভব৷ উত্তরাধিকারসূত্রে প্রাপ্ত অনুমতি মুছে ফেলা আইটেম এবং শিশু আইটেমগুলিতে অ্যাক্সেস বাতিল করে, যদি থাকে।

শেয়ার্ড ড্রাইভের আইটেমের জন্য, উত্তরাধিকারসূত্রে পাওয়া অনুমতি প্রত্যাহার করা যাবে না। পরিবর্তে প্যারেন্ট ফাইল বা ফোল্ডারের অনুমতি আপডেট করুন বা প্রত্যাহার করুন।

delete() পদ্ধতিটি শেয়ার্ড ড্রাইভ ফাইল বা ফোল্ডারে সরাসরি প্রয়োগ করা অনুমতিগুলি মুছে ফেলার জন্যও ব্যবহৃত হয়।

একটি উদাহরণ দেখান

নিম্নলিখিত কোড নমুনা দেখায় কিভাবে একটি permissionId মুছে অ্যাক্সেস প্রত্যাহার করতে হয়। সফল হলে, প্রতিক্রিয়া বডি খালি। অনুমতি সরানো হয়েছে তা নিশ্চিত করতে, fileId পাথ প্যারামিটার সহ permissions সংস্থানে list() পদ্ধতিটি ব্যবহার করুন।

অনুরোধ

DELETE https://www.googleapis.com/drive/v3/files/FILE_ID/permissions/PERMISSION_ID

একই প্রতিষ্ঠানের অন্য Google Workspace অ্যাকাউন্টে ফাইলের মালিকানা ট্রান্সফার করুন

"My Drive"-এ বিদ্যমান ফাইলগুলির মালিকানা একটি Google Workspace অ্যাকাউন্ট থেকে একই সংস্থার অন্য অ্যাকাউন্টে স্থানান্তর করা যেতে পারে। একটি শেয়ার্ড ড্রাইভের মালিক একটি সংস্থা এর মধ্যে থাকা ফাইলগুলির মালিক৷ তাই, শেয়ার্ড ড্রাইভে ফাইল এবং ফোল্ডারের জন্য মালিকানা স্থানান্তর সমর্থিত নয়। একটি শেয়ার্ড ড্রাইভের আয়োজকরা সেই শেয়ার্ড ড্রাইভ থেকে আইটেমগুলিকে এবং তাদের নিজস্ব "মাই ড্রাইভ"-এ স্থানান্তর করতে পারে যা তাদের মালিকানা স্থানান্তর করে।

"আমার ড্রাইভে" একটি ফাইলের মালিকানা স্থানান্তর করতে, নিম্নলিখিতগুলির মধ্যে একটি করুন:

  • একটি নির্দিষ্ট ব্যবহারকারী ( type=user ) মালিকের অ্যাক্সেস ( role=owner ) মঞ্জুর করে একটি ফাইল অনুমতি তৈরি করুন

  • role=owner সাথে একটি বিদ্যমান ফাইলের অনুমতি আপডেট করুন এবং নির্দিষ্ট ব্যবহারকারীর কাছে মালিকানা হস্তান্তর করুন ( transferOwnership=true )।

এক ভোক্তা অ্যাকাউন্ট থেকে অন্য ভোক্তা অ্যাকাউন্টে ফাইলের মালিকানা স্থানান্তর করুন

ফাইলের মালিকানা এক ভোক্তা অ্যাকাউন্টের মধ্যে অন্য গ্রাহকের অ্যাকাউন্টে স্থানান্তর করা যেতে পারে। যাইহোক, ড্রাইভ দুটি ভোক্তা অ্যাকাউন্টের মধ্যে একটি ফাইলের মালিকানা হস্তান্তর করে না যতক্ষণ না সম্ভাব্য মালিক স্থানান্তরে স্পষ্টভাবে সম্মতি দিচ্ছেন। একটি ভোক্তা অ্যাকাউন্ট থেকে অন্য গ্রাহক অ্যাকাউন্টে ফাইলের মালিকানা স্থানান্তর করতে:

  1. বর্তমান মালিক সম্ভাব্য মালিকের ফাইলের অনুমতি তৈরি বা আপডেট করার মাধ্যমে একটি মালিকানা স্থানান্তর শুরু করেন। অনুমতিতে অবশ্যই এই সেটিংস অন্তর্ভুক্ত থাকতে হবে: role=writer , type=user , এবং pendingOwner=true । যদি বর্তমান মালিক সম্ভাব্য মালিকের জন্য একটি অনুমতি তৈরি করে থাকেন, তাহলে সম্ভাব্য মালিকের কাছে একটি ইমেল বিজ্ঞপ্তি পাঠানো হয় যা নির্দেশ করে যে তাদের ফাইলটির মালিকানা গ্রহণ করতে বলা হচ্ছে।

  2. সম্ভাব্য মালিক তাদের ফাইলের অনুমতি তৈরি বা আপডেট করে মালিকানা স্থানান্তরের অনুরোধ গ্রহণ করেন। অনুমতিতে অবশ্যই এই সেটিংস অন্তর্ভুক্ত থাকতে হবে: role=owner এবং transferOwnership=true । যদি সম্ভাব্য মালিক একটি নতুন অনুমতি তৈরি করে থাকেন, তাহলে পূর্ববর্তী মালিককে একটি ইমেল বিজ্ঞপ্তি পাঠানো হয় যা নির্দেশ করে যে মালিকানা হস্তান্তর করা হয়েছে।

যখন একটি ফাইল স্থানান্তর করা হয়, তখন পূর্ববর্তী মালিকের ভূমিকা writer ডাউনগ্রেড করা হয়।

ব্যাচ অনুরোধ সহ একাধিক অনুমতি পরিবর্তন করুন

আমরা দৃঢ়ভাবে একাধিক অনুমতি পরিবর্তন করতে ব্যাচ অনুরোধ ব্যবহার করার সুপারিশ.

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

জাভা

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

Node.js

drive/snippets/drive_v3/file_snippets/share_file.js
/**
 * Batch permission modification
 * @param{string} fileId file ID
 * @param{string} targetUserEmail username
 * @param{string} targetDomainName domain
 * @return{list} permission id
 * */
async function shareFile(fileId, targetUserEmail, targetDomainName) {
  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app
  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const permissionIds = [];

  const permissions = [
    {
      type: 'user',
      role: 'writer',
      emailAddress: targetUserEmail, // 'user@partner.com',
    },
    {
      type: 'domain',
      role: 'writer',
      domain: targetDomainName, // 'example.com',
    },
  ];
  // Note: Client library does not currently support HTTP batch
  // requests. When possible, use batched requests when inserting
  // multiple permissions on the same item. For this sample,
  // permissions are inserted serially.
  for (const permission of permissions) {
    try {
      const result = await service.permissions.create({
        resource: permission,
        fileId: fileId,
        fields: 'id',
      });
      permissionIds.push(result.data.id);
      console.log(`Inserted permission id: ${result.data.id}`);
    } catch (err) {
      // TODO(developer): Handle failed permissions
      console.error(err);
    }
  }
  return permissionIds;
}

পিএইচপি

drive/snippets/drive_v3/src/DriveShareFile.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;
    }

}

.নেট

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