মানচিত্র ACLs

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

একটি ACL তৈরি করুন

একটি ACL তৈরি করা দুই ধাপের প্রক্রিয়া:

  1. ACL ক্লাসে স্ট্যাটিক পদ্ধতি ব্যবহার করে একটি Principal তৈরি করুন।
  2. প্রিন্সিপাল ব্যবহার করে ACL তৈরি করতে Acl.Builder ক্লাস ব্যবহার করুন।

এই ডকুমেন্টের বাকি অংশে ACL মডেল এবং তৈরি করার জন্য আপনার জানা প্রয়োজন এমন কিছু ধারণা অন্তর্ভুক্ত রয়েছে, যেমন উত্তরাধিকার এবং নিয়ন্ত্রণ।

একটি বহিরাগত আইডি ব্যবহার করে একটি প্রিন্সিপাল তৈরি করুন

গুগল ক্লাউড সার্চ ব্যবহারকারী এবং গোষ্ঠীগুলিকে গুগল ইমেল ঠিকানায় সমাধান করতে বাধ্য করে। রিপোজিটরি আইটেমগুলি সূচী করার সময়, কন্টেন্ট সংযোগকারীগুলিতে এই ইমেল ঠিকানাগুলি নাও থাকতে পারে। তবে, কন্টেন্ট সংযোগকারী SDK আপনাকে কোনও আইটেম সূচী করার জন্য ইমেল ঠিকানার পরিবর্তে যেকোনো বহিরাগত আইডি (ব্যবহারকারী বা গোষ্ঠীকে রিপোজিটরি আইটেমগুলিতে অ্যাক্সেস প্রদানকারী আইডি) ব্যবহার করতে দেয়। বহিরাগত আইডি ধারণকারী প্রিন্সিপাল তৈরি করতে getUserPrincipal() পদ্ধতি বা getGroupPrincpal() পদ্ধতি ব্যবহার করুন। Principal অবজেক্ট তৈরি করতে ACL ক্লাসে আরও বেশ কয়েকটি স্ট্যাটিক পদ্ধতি ব্যবহার করা হয়।

ACL উত্তরাধিকার

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

উত্তরাধিকার সেট করুন

প্রতিটি আইটেমে ডাইরেক্ট অ্যালভড প্রিন্সিপাল এবং ডাইরেক্ট অ্যালভড প্রিন্সিপাল থাকতে পারে, যা setReaders() এবং setDeniedReaders() পদ্ধতি ব্যবহার করে নির্দিষ্ট করা হয়। ডাইরেক্ট অ্যালভড প্রিন্সিপাল হল ACL-তে চিহ্নিত একজন ব্যবহারকারী যা তাদের একটি নির্দিষ্ট আইটেমে সরাসরি অ্যাক্সেস দেয়। ডাইরেক্ট অ্যালভড প্রিন্সিপাল হল ACL-তে চিহ্নিত একজন ব্যবহারকারী যা একটি নির্দিষ্ট আইটেমে অ্যাক্সেস পায় না।

একটি আইটেম setInheritFrom() পদ্ধতি ব্যবহার করে পরোক্ষ অনুমোদিত প্রিন্সিপাল এবং পরোক্ষ অস্বীকৃত প্রিন্সিপালও উত্তরাধিকার সূত্রে পেতে পারে। একটি পরোক্ষ অনুমোদিত প্রিন্সিপাল হল এমন একজন ব্যবহারকারী যার ACL উত্তরাধিকারের মাধ্যমে একটি নির্দিষ্ট আইটেমে পরোক্ষ অ্যাক্সেস থাকে। একটি পরোক্ষ অস্বীকৃত প্রিন্সিপাল হল এমন একজন ব্যবহারকারী যাকে ACL উত্তরাধিকারের মাধ্যমে একটি নির্দিষ্ট আইটেমে অ্যাক্সেস থেকে বঞ্চিত করা হয়।

চিত্র ১-এ দেখানো হয়েছে কিভাবে setInheritFrom() পদ্ধতিটি পরোক্ষ অনুমোদিত এবং পরোক্ষ অস্বীকার করা প্রিন্সিপালগুলিকে উত্তরাধিকার সূত্রে প্রাপ্ত করার জন্য ব্যবহৃত হয়।

আইটেমগুলির মধ্যে সংযোগের অঙ্কন
চিত্র ১. setInheritFrom() পদ্ধতি।

এই অ্যাক্সেস নিয়ন্ত্রণগুলি চিত্র 1 এ দেখানো হয়েছে:

  • ব্যবহারকারী ১ হল আইটেম A এর একটি সরাসরি অনুমোদিত মূলধন।
  • ব্যবহারকারী ২ হল আইটেম B এর একটি সরাসরি অনুমোদিত মূলধন।
  • আইটেম B, আইটেম A এর ACL উত্তরাধিকারসূত্রে পায়।

অ্যাক্সেস নিয়ন্ত্রণের উপর ভিত্তি করে, অ্যাক্সেসের নিয়মগুলি হল:

  • আইটেম B এর পরোক্ষ অনুমোদিত মূলধন হিসেবে ব্যবহারকারী ১ কে স্পষ্টভাবে আইটেম B এর মূলধন হিসেবে উল্লেখ করার প্রয়োজন নেই; অ্যাক্সেস উত্তরাধিকারসূত্রে পাওয়া যায় কারণ ব্যবহারকারী ১ আইটেম A এর সরাসরি অনুমোদিত মূলধন হিসেবে তালিকাভুক্ত এবং আইটেম B আইটেম A থেকে তার ACL উত্তরাধিকারসূত্রে পায়।
  • ব্যবহারকারী ২ আইটেম A-এর জন্য পরোক্ষভাবে অনুমোদিত মূলনীতি নয়।

উত্তরাধিকারের ধরণ সেট করুন

যদি আপনি setInheritFrom() পদ্ধতি ব্যবহার করে উত্তরাধিকার সেট করেন, তাহলে আপনাকে setInheritanceType() পদ্ধতি ব্যবহার করে উত্তরাধিকারের ধরণ সেট করতে হবে। উত্তরাধিকারের ধরণ নির্ধারণ করে যে কীভাবে একটি শিশুর ACL তার পিতামাতার ACL এর সাথে মিলিত হয়। Acl.InheritanceType তিনটি উত্তরাধিকারের ধরণ প্রয়োগ করে:

  • BOTH_PERMIT - ব্যবহারকারীকে আইটেমটিতে অ্যাক্সেস দেওয়ার জন্য উত্তরাধিকারের ধরণটি BOTH_PERMIT এ সেট করুন, শুধুমাত্র তখনই যখন চাইল্ড আইটেমের ACL এবং পিতামাতার উত্তরাধিকারসূত্রে প্রাপ্ত আইটেম ACL উভয়ই ব্যবহারকারীকে সেই আইটেমটি অ্যাক্সেস করার অনুমতি দেয়।

  • CHILD_OVERRIDE - উত্তরাধিকারের ধরণ CHILD_OVERRIDE এ সেট করুন যাতে উত্তরাধিকারসূত্রে প্রাপ্ত মূল আইটেমের ACL-এর সাথে বিরোধের সময় চাইল্ড আইটেমের ACL-কে অগ্রাধিকার দেওয়া যায়। সুতরাং, যদি মূল আইটেমের ACL ব্যবহারকারীকে অস্বীকৃত পাঠক হিসেবে অ্যাক্সেস দিতে অস্বীকার করে, তাহলে ব্যবহারকারীর কাছে পাঠক হিসেবে চাইল্ড আইটেমে অ্যাক্সেস থাকলে এখনও অ্যাক্সেস থাকবে। বিপরীতভাবে, মূল আইটেমের ACL ব্যবহারকারীকে অ্যাক্সেস দিলেও, ব্যবহারকারী যদি সন্তানের অস্বীকৃত পাঠক হন তবে তাদের কাছে অ্যাক্সেস থাকবে না।

  • PARENT_OVERRIDE - উত্তরাধিকারের ধরণ PARENT_OVERRIDE এ সেট করুন যাতে প্যারেন্ট আইটেমের ACL-কে চাইল্ড আইটেমের ACL-এর উপর প্রাধান্য দিতে বাধ্য করা যায়। সুতরাং, যদি চাইল্ড আইটেমের ACL ব্যবহারকারীকে অস্বীকৃত পাঠক হিসেবে অ্যাক্সেস দিতে অস্বীকার করে, তাহলে ব্যবহারকারীর কাছে যদি রিডার হিসেবে প্যারেন্ট আইটেমে অ্যাক্সেস থাকে তবে তার কাছে অ্যাক্সেস থাকবে। বিপরীতভাবে, চাইল্ড আইটেমের ACL ব্যবহারকারীকে অ্যাক্সেস দিলেও, ব্যবহারকারী যদি প্যারেন্ট আইটেমের অস্বীকৃত পাঠক হন তবে তার কাছে অ্যাক্সেস থাকবে না।

ACL উত্তরাধিকার শৃঙ্খল মূল্যায়ন করার সময়, মূল্যায়নের ক্রম অনুমোদনের সিদ্ধান্তের ফলাফল পরিবর্তন করতে পারে। ক্লাউড সার্চ ACL উত্তরাধিকার শৃঙ্খলের জন্য লিফ-টু-রুট মূল্যায়নের ক্রম প্রদান করে। বিশেষ করে, একটি শৃঙ্খলের জন্য ACL সিদ্ধান্ত একটি শিশুর তার পিতামাতার মূল্যায়ন দিয়ে শুরু হয় এবং মূল পিতামাতার কাছে যেতে পারে।

উদাহরণস্বরূপ, যদি সন্তানের CHILD_OVERRIDE উত্তরাধিকারের ধরণ থাকে এবং ব্যবহারকারীর সন্তানের অ্যাক্সেস থাকে, তাহলে Drive-এর পিতামাতার মূল্যায়ন করার প্রয়োজন নেই। তবে, যদি সন্তানের PARENT_OVERRIDE বা BOTH_PERMIT থাকে, তাহলে Drive পরবর্তী শৃঙ্খলে উত্তরাধিকারের মূল্যায়ন চালিয়ে যাবে।

কন্টেনমেন্ট এবং আইটেম মুছে ফেলা

কোনও আইটেম ইনডেক্স করার সময়, আপনি IndexingItemBuilder ক্লাসের setContainer() পদ্ধতি ব্যবহার করে কোনও আইটেমকে একটি কন্টেইনার হিসেবে লেবেল করতে পারেন। কন্টেইনার/কন্টেইনার সম্পর্ক আইটেমগুলির ভৌত অনুক্রম স্থাপন করে এবং নিশ্চিত করে যে আইটেমগুলি সঠিকভাবে মুছে ফেলা হয়েছে। যখন কোনও কন্টেইনার মুছে ফেলা হয়, তখন অন্তর্ভুক্ত আইটেমগুলিও মুছে ফেলা হয়।

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

এই অ্যাক্সেস নিয়ন্ত্রণগুলি চিত্র 2 এ দেখানো হয়েছে:

  • ব্যবহারকারী ১ হল আইটেম A এর একটি সরাসরি অনুমোদিত মূলধন।
  • ব্যবহারকারী ২ হল আইটেম B এর একটি সরাসরি অনুমোদিত মূলধন।
  • ব্যবহারকারী ৩ হল আইটেম C এর একটি সরাসরি অনুমোদিত মূলধন।
  • আইটেম সি, আইটেম A এর ACL উত্তরাধিকারসূত্রে পায়।
  • আইটেম B আইটেম A কে তার ধারক হিসেবে নামকরণ করে।
  • আইটেম সি আইটেম বি কে তার ধারক হিসাবে নামকরণ করে।

অ্যাক্সেস নিয়ন্ত্রণের উপর ভিত্তি করে, অ্যাক্সেসের নিয়মগুলি হল:

  • পরোক্ষ অ্যাক্সেস setInheritFrom() পদ্ধতি থেকে আসে। অতএব, ব্যবহারকারী ১ আইটেম C অ্যাক্সেস করতে পারে কারণ আইটেম C আইটেম A এর ACL উত্তরাধিকারসূত্রে পায়।
  • আইটেম B দ্বারা অন্তর্ভুক্ত আইটেম C থেকে পরোক্ষ অ্যাক্সেস আসে না। অতএব, ব্যবহারকারী 2 আইটেম C অ্যাক্সেস করতে পারবেন না।
আইটেমগুলির মধ্যে সংযোগের অঙ্কন
চিত্র ২। ব্যবহৃত setInheritFrom() পদ্ধতি।

ACL উত্তরাধিকারকে কনটেনমেন্ট হায়ারার্কি থেকে পৃথক করার মাধ্যমে আপনি অনেকগুলি ভিন্ন বিদ্যমান কাঠামোর মডেল তৈরি করতে পারবেন।

যখন কোনও আইটেম সফলভাবে মুছে ফেলা হয়:

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

যদি কোনও রিসোর্সে setInheritFrom() পদ্ধতি ব্যবহার করে একটি মুছে ফেলা আইটেম থাকে, কিন্তু setContainer() ব্যবহার করে কোনও কন্টেইনার সেট না থাকে, অথবা এর কন্টেনমেন্ট হায়ারার্কিতে কোনও মুছে ফেলা আইটেম না থাকে, তাহলে সেই আইটেম এবং এর ডেটা Google এর ডেটা সোর্সে থেকে যায়। আইটেমটি মুছে ফেলার জন্য আপনার দায়িত্ব।

চিত্র ৩ একটি আইটেমের শ্রেণিবিন্যাসের জন্য মুছে ফেলার পদ্ধতি কীভাবে কাজ করে তার একটি উদাহরণ দেখায়।

আইটেমগুলির মধ্যে সংযোগের অঙ্কন
চিত্র ৩. একটি আইটেম এবং ACL উত্তরাধিকার মুছে ফেলা।

এই অ্যাক্সেস নিয়ন্ত্রণগুলি চিত্র 3 এ দেখানো হয়েছে:

  • ব্যবহারকারী ১ হল আইটেম A এর একটি সরাসরি অনুমোদিত মূলধন।
  • ব্যবহারকারী ২ হল আইটেম D এর একটি সরাসরি অনুমোদিত মূলধন।
  • আইটেম D এবং আইটেম E উভয়ই আইটেম A এর ACL উত্তরাধিকারসূত্রে পায়।
  • আইটেম D আইটেম A কে তার ধারক হিসেবে নামকরণ করে।
  • আইটেম A এবং E হল রুট-লেভেল আইটেম কারণ তাদের কোনও কন্টেইনার আইটেম নেই।

কন্টেইনার রেফারেন্সের মধ্য দিয়ে ক্যাসকেড মুছে ফেলে। যখন আইটেম A মুছে ফেলা হয়:

  • setInheritFrom() রেফারেন্সের সমস্ত ডিসেন্ডেন্ট সকল ব্যবহারকারীর জন্য অ্যাক্সেস হারাবে।
  • কোনও ব্যবহারকারী আইটেম A অ্যাক্সেস করতে পারবেন না।
  • আইটেম D পরোক্ষভাবে মুছে ফেলা হয়েছে। কোনও ব্যবহারকারী আইটেম D অ্যাক্সেস করতে পারবেন না।
  • আইটেম E মুছে ফেলা হয় না, কারণ মুছে ফেলা কেবল কন্টেইনার রেফারেন্সের মধ্য দিয়েই ঘটে।
  • আইটেম E পৌঁছানো যাচ্ছে না এবং কোনও ব্যবহারকারী আইটেম E অনুসন্ধান করতে পারবেন না।