অনুমোদনের সুযোগ

ব্যবহারকারীদের অবশ্যই স্ক্রিপ্ট প্রকল্প অনুমোদন করতে হবে যা তাদের ডেটা অ্যাক্সেস করে বা তাদের পক্ষে কাজ করে। যখন একজন ব্যবহারকারী একটি স্ক্রিপ্ট চালায় যার জন্য প্রথমবার অনুমোদনের প্রয়োজন হয়, তখন UI অনুমোদনের প্রবাহ শুরু করার জন্য একটি প্রম্পট উপস্থাপন করে।

এই প্রবাহের সময়, UI ব্যবহারকারীকে বলে যে স্ক্রিপ্টটি কী করার অনুমতি চায়৷ উদাহরণস্বরূপ, একটি স্ক্রিপ্ট ব্যবহারকারীর ইমেল বার্তাগুলি পড়ার বা তাদের ক্যালেন্ডারে ইভেন্ট তৈরি করার অনুমতি চাইতে পারে। স্ক্রিপ্ট প্রকল্প এই পৃথক অনুমতিগুলিকে OAuth স্কোপ হিসাবে সংজ্ঞায়িত করে।

বেশিরভাগ স্ক্রিপ্টের জন্য, অ্যাপস স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে সনাক্ত করে যে আপনার জন্য কোন স্কোপ প্রয়োজন; আপনি যে কোনো সময় স্ক্রিপ্ট ব্যবহার করে স্কোপ দেখতে পারেন। আপনি URL স্ট্রিং ব্যবহার করে আপনার ম্যানিফেস্টে স্পষ্টভাবে স্কোপ সেট করতে পারেন। অ্যাড-অনগুলির মতো নির্দিষ্ট অ্যাপ্লিকেশনগুলির জন্য স্পষ্টভাবে স্কোপ সেট করা কখনও কখনও প্রয়োজন হয়, যেহেতু প্রকাশিত অ্যাপ্লিকেশনগুলি সর্বদা সম্ভাব্য সংকীর্ণ স্কোপগুলি ব্যবহার করা উচিত৷

অনুমোদনের প্রবাহের সময়, অ্যাপস স্ক্রিপ্ট ব্যবহারকারীর কাছে প্রয়োজনীয় স্কোপের মানব-পাঠযোগ্য বর্ণনা উপস্থাপন করে। উদাহরণস্বরূপ, যদি আপনার স্প্রেডশীটগুলিতে আপনার স্ক্রিপ্টের শুধুমাত্র-পঠন অ্যাক্সেসের প্রয়োজন হয়, ম্যানিফেস্টের সুযোগ থাকতে পারে https://www.googleapis.com/auth/spreadsheets.readonly । অনুমোদনের প্রবাহের সময়, এই সুযোগ সহ একটি স্ক্রিপ্ট ব্যবহারকারীকে এই অ্যাপ্লিকেশনটিকে "আপনার Google স্প্রেডশীটগুলি দেখার" অনুমতি দিতে বলে৷

কিছু সুযোগ অন্যদের অন্তর্ভুক্ত। উদাহরণস্বরূপ, যখন সুযোগ অনুমোদন করা হয় https://www.googleapis.com/auth/spreadsheets স্প্রেডশীটগুলিতে পড়ার এবং লেখার অ্যাক্সেসের অনুমতি দেয়৷

কিছু সারফেস যেখানে স্ক্রিপ্ট চালানো হয়, যেমন অ্যাপস স্ক্রিপ্ট IDE থেকে সরাসরি স্ক্রিপ্ট চালানো, ব্যবহারকারীদের দানাদার OAuth সম্মতি স্ক্রীনের সাথে উপস্থাপন করা হয়। এটি ব্যবহারকারীদের একবারে সমস্ত অনুমতি দেওয়ার পরিবর্তে মঞ্জুর করার জন্য নির্দিষ্ট অনুমতিগুলি নির্বাচন করতে দেয়৷ দানাদার OAuth অনুমতিগুলি পরিচালনা করার জন্য আপনার স্ক্রিপ্ট ডিজাইন করা গুরুত্বপূর্ণ৷

স্কোপ দেখুন

আপনি নিম্নলিখিতগুলি করে আপনার স্ক্রিপ্ট প্রকল্পের বর্তমানে প্রয়োজনীয় সুযোগগুলি দেখতে পারেন:

  1. স্ক্রিপ্ট প্রকল্প খুলুন.
  2. বাম দিকে, ওভারভিউ ক্লিক করুন।
  3. প্রকল্প OAuth সুযোগের অধীনে স্কোপগুলি দেখুন।

সুস্পষ্ট সুযোগ সেট করুন

অ্যাপস স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে নির্ধারণ করে যে কোন স্ক্রিপ্টের প্রয়োজনের জন্য কোন ফাংশন কলের জন্য তার কোড স্ক্যান করে। বেশিরভাগ স্ক্রিপ্টের জন্য এটি যথেষ্ট এবং আপনার সময় বাঁচায়, তবে প্রকাশিত অ্যাড-অন, ওয়েব অ্যাপ, Google চ্যাট অ্যাপ এবং Google Chat API-তে কল করার জন্য আপনাকে অবশ্যই স্কোপের আরও সরাসরি নিয়ন্ত্রণ অনুশীলন করতে হবে।

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

আপনি স্পষ্টভাবে আপনার স্ক্রিপ্ট প্রকল্পটি এর ম্যানিফেস্ট ফাইল সম্পাদনা করে যে স্কোপগুলি ব্যবহার করে তা সেট করতে পারেন৷ ম্যানিফেস্ট ফিল্ড oauthScopes হল প্রোজেক্টের দ্বারা ব্যবহৃত সমস্ত স্কোপের একটি অ্যারে। আপনার প্রকল্পের সুযোগ সেট করতে, নিম্নলিখিতগুলি করুন:

  1. স্ক্রিপ্ট প্রকল্প খুলুন.
  2. বামদিকে, প্রকল্প সেটিংস ক্লিক করুন।
  3. সম্পাদক চেকবক্সে "appsscript.json" ম্যানিফেস্ট ফাইল দেখান নির্বাচন করুন।
  4. বাম দিকে, এডিটর ক্লিক করুন।
  5. বামদিকে, appsscript.json ফাইলটিতে ক্লিক করুন।
  6. oauthScopes লেবেলযুক্ত শীর্ষ-স্তরের ক্ষেত্রটি সনাক্ত করুন। এটি উপস্থিত না থাকলে, আপনি এটি যোগ করতে পারেন।
  7. oauthScopes ক্ষেত্রটি স্ট্রিংয়ের একটি অ্যারে নির্দিষ্ট করে। আপনার প্রকল্প ব্যবহার করে স্কোপ সেট করতে, আপনি এটি ব্যবহার করতে চান সেই স্কোপের সাথে এই অ্যারের বিষয়বস্তু প্রতিস্থাপন করুন। যেমন:
          {
            ...
            "oauthScopes": [
              "https://www.googleapis.com/auth/spreadsheets.readonly",
              "https://www.googleapis.com/auth/userinfo.email"
            ],
           ...
          }
  8. শীর্ষে, সংরক্ষণ করুন ক্লিক করুন।

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

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

নিম্নলিখিত বিভাগগুলি দানাদার OAuth অনুমতিগুলি পরিচালনা করার প্রধান উপায়গুলি বর্ণনা করে৷

প্রয়োজনীয় স্কোপের জন্য স্বয়ংক্রিয়ভাবে অনুমতি প্রয়োজন

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

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

  • requireScopes(authMode, oAuthScopes) : এক্সিকিউশন ফ্লোগুলির জন্য এই পদ্ধতিটি ব্যবহার করুন যা এক বা একাধিক স্কোপের উপর নির্ভর করে, কিন্তু আপনার স্ক্রিপ্ট দ্বারা ব্যবহৃত সমস্ত স্কোপ নয়।
  • requireAllScopes(authMode) : এই পদ্ধতিটি ব্যবহার করুন যদি একটি এক্সিকিউশন ফ্লো আপনার স্ক্রিপ্ট দ্বারা ব্যবহৃত সমস্ত স্কোপের উপর নির্ভর করে।

উদাহরণ

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে requireScopes(authMode, oAuthScopes) এবং requireAllScopes(authMode) পদ্ধতিগুলিকে কল করতে হয়। স্ক্রিপ্টটি Gmail, পত্রক এবং ক্যালেন্ডারের জন্য স্কোপ ব্যবহার করে। sendEmail() ফাংশনের জন্য শুধুমাত্র Gmail এবং Sheets এর স্কোপের প্রয়োজন হয় যখন createEventSendEmail() ফাংশনের জন্য স্ক্রিপ্ট দ্বারা ব্যবহৃত সমস্ত স্কোপের প্রয়োজন হয়।

// This function requires the Gmail and Sheets scopes.
function sendEmail() {
  // Validates that the user has granted permission for the Gmail and Sheets scopes.
  // If not, the execution ends and prompts the user for authorization.
  ScriptApp.requireScopes(ScriptApp.AuthMode.FULL, [
    'https://mail.google.com/',
    'https://www.googleapis.com/auth/spreadsheets'
  ]);

  // Sends an email.
  GmailApp.sendEmail("dana@example.com", "Subject", "Body");
  Logger.log("Email sent successfully!");

  // Opens a spreadsheet and sheet to track the sent email.
  const ss = SpreadsheetApp.openById("abc1234567");
  const sheet = ss.getSheetByName("Email Tracker")

  // Gets the last row of the sheet.
  const lastRow = sheet.getLastRow();

  // Adds "Sent" to column E of the last row of the spreadsheet.
  sheet.getRange(lastRow, 5).setValue("Sent");
  Logger.log("Sheet updated successfully!");
}

// This function requires all scopes used by the script (Gmail,
// Calendar, and Sheets).
function createEventSendEmail() {
  // Validates that the user has granted permission for all scopes used by the
  // script. If not, the execution ends and prompts the user for authorization.
  ScriptApp.requireAllScopes(ScriptApp.AuthMode.FULL);

  // Creates an event.
  CalendarApp.getDefaultCalendar().createEvent(
    "Meeting",
    new Date("November 28, 2024 10:00:00"),
    new Date("November 28, 2024 11:00:00")
  );
  Logger.log("Calendar event created successfully!");

  // Sends an email.
  GmailApp.sendEmail("dana@example.com", "Subject 2", "Body 2");
  Logger.log("Email sent successfully!");

  // Opens a spreadsheet and sheet to track the created meeting and sent email.
  const ss = SpreadsheetApp.openById("abc1234567");
  const sheet = ss.getSheetByName("Email and Meeting Tracker")
  // Gets the last row
  const lastRow = sheet.getLastRow();

  // Adds "Sent" to column E of the last row
  sheet.getRange(lastRow, 5).setValue("Sent");
  // Adds "Meeting created" to column F of the last row
  sheet.getRange(lastRow, 6).setValue("Meeting created");
  Logger.log("Sheet updated successfully!");
}

অনুপস্থিত স্কোপের জন্য একটি কাস্টম অভিজ্ঞতা তৈরি করুন

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

  • getAuthorizationInfo(authMode, oAuthScopes) : নির্দিষ্ট স্কোপের জন্য অনুমতি স্থিতি পরীক্ষা করতে এই পদ্ধতিটি ব্যবহার করুন।
  • getAuthorizationInfo(authMode) : আপনার স্ক্রিপ্ট দ্বারা ব্যবহৃত সমস্ত স্কোপের জন্য অনুমতি স্থিতি পরীক্ষা করতে এই পদ্ধতিটি ব্যবহার করুন।

অনুমোদন তথ্য অবজেক্ট থেকে অনুমতির বিশদ বিবরণ পেতে, যেমন কোন স্কোপগুলি অনুমোদিত হয়েছে তার একটি তালিকা এবং অনুপস্থিত অনুমতিগুলির অনুরোধ করার জন্য একটি URL, AuthorizationInfo ক্লাস থেকে পদ্ধতিগুলি ব্যবহার করুন।

উদাহরণ

নিম্নলিখিত উদাহরণ দেখায় যে কিভাবে একটি কার্যকরী প্রবাহের মধ্যে নির্দিষ্ট বৈশিষ্ট্যগুলি এড়িয়ে যেতে getAuthorizationInfo(authMode, oAuthScopes) পদ্ধতিতে কল করতে হয় যেখানে প্রয়োজনীয় সুযোগগুলি মঞ্জুর করা হয়নি৷ এটি অনুপস্থিত স্কোপের অনুমোদনের জন্য অনুরোধ না করেই বাকী এক্সিকিউশন ফ্লো চালিয়ে যেতে দেয়।

// This function uses the Gmail scope and skips the email
// capabilities if the scope for Gmail hasn't been granted.
function myFunction() {
  const authInfo = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL, ['https://mail.google.com/']);
  if (authInfo.getAuthorizationStatus() === ScriptApp.AuthorizationStatus.NOT_REQUIRED) {
    GmailApp.sendEmail("dana@example.com", "Subject", "Body");
    Logger.log("Email sent successfully!");
  } else {
    const scopesGranted = ScriptApp.getAuthorizationInfo(ScriptApp.AuthMode.FULL).getAuthorizedScopes();
    console.warn(`Authorized scopes: ${scopesGranted} not enough to send mail, skipping.`);
  }
  // Continue the rest of the execution flow...
}

OAuth যাচাইকরণ

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

সীমাবদ্ধ সুযোগ

সংবেদনশীল স্কোপগুলি ছাড়াও, নির্দিষ্ট স্কোপগুলিকে সীমাবদ্ধ হিসাবে শ্রেণীবদ্ধ করা হয় এবং অতিরিক্ত নিয়মের সাপেক্ষে যা ব্যবহারকারীর ডেটা সুরক্ষিত করতে সহায়তা করে। আপনি যদি একটি ওয়েব অ্যাপ বা অ্যাড-অন প্রকাশ করতে চান যা এক বা একাধিক সীমাবদ্ধ স্কোপ ব্যবহার করে, তাহলে অ্যাপটিকে প্রকাশ করার আগে অবশ্যই সমস্ত নির্দিষ্ট বিধিনিষেধ মেনে চলতে হবে।

আপনি প্রকাশ করার চেষ্টা করার আগে সীমাবদ্ধ স্কোপের সম্পূর্ণ তালিকা পর্যালোচনা করুন। যদি আপনার অ্যাপ সেগুলির যেকোনও ব্যবহার করে, তাহলে প্রকাশ করার আগে আপনাকে নির্দিষ্ট API স্কোপের জন্য অতিরিক্ত প্রয়োজনীয়তা মেনে চলতে হবে।