ফায়ারবেস ক্লাউড স্টোরেজ সুরক্ষা বিধিগুলিতে শর্তাদি ব্যবহার করুন

এই নির্দেশিকাটি তৈরী করে উপর Firebase সিকিউরিটি রুলস ভাষা কোর সিনট্যাক্স শিখতে ক্লাউড স্টোরেজ জন্য আপনার Firebase সিকিউরিটি রুলস শর্ত যোগ করার জন্য কিভাবে দেখানোর জন্য গাইড।

ক্লাউড স্টোরেজ সিকিউরিটি রুলস প্রাথমিক বিল্ডিং ব্লক অবস্থা। একটি শর্ত হ'ল বুলিয়ান এক্সপ্রেশন যা নির্দিষ্ট ক্রিয়াকলাপের অনুমতি দেওয়া বা অস্বীকার করা উচিত তা নির্ধারণ করে। সাধারণ নিয়ম জন্য ব্যবহার true এবং false অবস্থা লিটারেল prefectly ভাল কাজ করে। তবে ক্লাউড স্টোরেজ ভাষার জন্য ফায়ারবেস সুরক্ষা বিধিগুলি আপনাকে আরও জটিল শর্ত লেখার উপায় দেয় যা করতে পারে:

  • ব্যবহারকারীর অনুমোদন পরীক্ষা করুন
  • আগত ডেটা বৈধ করুন

প্রমাণীকরণ

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

যখন একটি ক্লাউড স্টোরেজ বিরুদ্ধে অনুরোধ প্রমাণীকৃত ব্যবহারকারী সম্পাদন করে, request.auth পরিবর্তনশীল ব্যবহারকারীর দিয়ে পূর্ণ করা uid ( request.auth.uid ) ভাল Firebase প্রমাণীকরণ JWT (দাবি যত request.auth.token )।

উপরন্তু, যখন কাস্টম প্রমাণীকরণ ব্যবহার করে, অতিরিক্ত দাবির মধ্যে নিবেশ করা হয় request.auth.token ক্ষেত্র।

একটি অবিশ্বস্ত ব্যবহারকারী একটি অনুরোধ সঞ্চালিত হলে, request.auth পরিবর্তনশীল null

এই ডেটা ব্যবহার করে, ফাইলগুলি সুরক্ষিত করতে প্রমাণীকরণ ব্যবহারের বিভিন্ন সাধারণ উপায় রয়েছে:

  • সার্বজনীন: উপেক্ষা করা request.auth
  • ব্যক্তিগত প্রমাণীকৃত: চেক request.auth নয় null
  • ব্যবহারকারী ব্যক্তিগত: চেক request.auth.uid একটি পাথ সমান uid
  • গোষ্ঠী বেসরকারী: পছন্দসই দাবির সাথে মেলে তুলতে কাস্টম টোকেনের দাবিগুলি পরীক্ষা করুন বা কোনও মেটাডেটা ক্ষেত্র বিদ্যমান কিনা তা দেখতে ফাইল মেটাডেটা পড়ুন

পাবলিক

কোন নিয়ম যে বিবেচনা না request.auth প্রসঙ্গ একটি বিবেচনা করা যেতে পারে public , নিয়ম যেহেতু এটি ব্যবহারকারীর প্রমাণীকরণ প্রসঙ্গ বিবেচনা করে না। এই বিধিগুলি গেমের সম্পদ, শব্দ ফাইলগুলি বা অন্যান্য স্থিতিশীল সামগ্রীর মতো পাবলিক ডেটা সার্ফেসের জন্য কার্যকর হতে পারে।

// Anyone to read a public image if the file is less than 100kB
// Anyone can upload a public file ending in '.txt'
match /public/{imageId} {
  allow read: if resource.size < 100 * 1024;
  allow write: if imageId.matches(".*\\.txt");
}

প্রামাণিক বেসরকারী

কিছু কিছু ক্ষেত্রে, আপনি আপনার অ্যাপ্লিকেশনটির সমস্ত অনুমোদনপ্রাপ্ত ব্যবহারকারীদের দ্বারা ডেটা দেখতে পারাতে পারেন, তবে অমনিরোধী ব্যবহারকারীদের দ্বারা নয়। যেহেতু request.auth পরিবর্তনশীল null সব অবিশ্বস্ত ব্যবহারকারীদের জন্য, সমস্ত আপনাকে যা করতে হবে চেক request.auth পরিবর্তনশীল অর্ডার প্রমাণীকরণের প্রয়োজন হবে বিদ্যমান:

// Require authentication on all internal image reads
match /internal/{imageId} {
  allow read: if request.auth != null;
}

ব্যবহারকারী ব্যক্তিগত

দ্বারা পর্যন্ত সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে request.auth ব্যক্তিগত নথি পড়া আপলোড প্রোফাইল ছবি থেকে: তাদের ফাইল উপর ঝুরা অনুমতিসহ স্বতন্ত্র ব্যবহারকারীর প্রদান করা হবে।

যেহেতু Cloud Storage এ ফাইল ফাইলের একটি পূর্ণ "পথ" আছে, সব একটি ফাইল একটি ব্যবহারকারী দ্বারা নিয়ন্ত্রিত করতে লাগে ফাইলের নাম উপসর্গ অনন্য, ব্যবহারকারী শনাক্তকরণ তথ্য এক টুকরা (যেমন ব্যবহারকারীর হিসাবে uid ) যে চেক করা যাবে যখন নিয়মটি মূল্যায়ন করা হয়:

// Only a user can upload their profile picture, but anyone can view it
match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth.uid == userId;
}

গ্রুপ বেসরকারী

আরেকটি সমানভাবে সাধারণ ব্যবহারের ক্ষেত্রে হ'ল কোনও বস্তুর উপর গ্রুপের অনুমতি দেওয়া যেমন বিভিন্ন দলের সদস্যদের ভাগ করা নথিতে সহযোগিতা করার অনুমতি দেওয়া। এটি করার জন্য বেশ কয়েকটি পদ্ধতি রয়েছে:

  • পুদিনা একটি Firebase প্রমাণীকরণ কাস্টম টোকেন যে (যেমন একটি গোষ্ঠী ID) একটি গ্রুপ সদস্য সম্পর্কে অতিরিক্ত তথ্য উপস্থিত রয়েছে
  • (যেমন একটি গ্রুপ আইডি বা অনুমোদিত তালিকা যেমন গ্রুপ তথ্য অন্তর্ভুক্ত করুন uid মধ্যে গুলি) ফাইলগুলির মেটাডেটা

এই ডেটা একবার টোকেন বা ফাইল মেটাডেটাতে সংরক্ষণ করা হয়ে গেলে, এটি কোনও নিয়মের মধ্যে থেকে উল্লেখ করা যেতে পারে:

// Allow reads if the group ID in your token matches the file metadata's `owner` property
// Allow writes if the group ID is in the user's custom token
match /files/{groupId}/{fileName} {
  allow read: if resource.metadata.owner == request.auth.token.groupId;
  allow write: if request.auth.token.groupId == groupId;
}

মূল্যায়ন অনুরোধ

আপলোড, ডাউনলোড, মেটাডেটা পরিবর্তন এবং মোছাগুলিকে ব্যবহার মূল্যায়ন করা হয় request ক্লাউড স্টোরেজ পাঠানো হয়েছে। ব্যবহারকারীর অনন্য আইডি এবং মধ্যে Firebase প্রমাণীকরণ পে লোড ছাড়াও request.auth বস্তুর উপরে বর্ণিত হিসাবে, request পরিবর্তনশীল ফাইল পাথ যেখানে অনুরোধ সম্পাদিত হচ্ছে, যখন অনুরোধ গৃহীত হয়, এবং নতুন ধারণ resource মান যদি অনুরোধ একটি লেখা। এইচটিটিপি শিরোনাম এবং প্রমাণীকরণের স্থিতিও অন্তর্ভুক্ত।

request বস্তুর ব্যবহারকারীর অনন্য আইডি এবং মধ্যে Firebase প্রমাণীকরণ পে লোড রয়েছে request.auth বস্তু, যার আরও ব্যাখ্যা করা হবে ব্যবহারকারী-ভিত্তিক নিরাপত্তা ডক্সের অধ্যায়।

এ সম্পত্তি এর একটি পূর্ণ তালিকা request বস্তুর নিচে পাওয়া যায়:

সম্পত্তি প্রকার বর্ণনা
auth মানচিত্র <স্ট্রিং, স্ট্রিং> একটি ব্যবহারকারী লগ ইন থাকলেও, উপলব্ধ যখন uid , ব্যবহারকারীর অনন্য আইডি, এবং token , Firebase প্রমাণীকরণ JWT দাবির একটি মানচিত্র। অন্যথায়, এটি হতে হবে null
params মানচিত্র <স্ট্রিং, স্ট্রিং> অনুরোধের ক্যোয়ারী প্যারামিটার সহ মানচিত্র।
path পথ একটি path পাথ অনুরোধে সঞ্চালিত হচ্ছে উপস্থাপন করে।
resource মানচিত্র <স্ট্রিং, স্ট্রিং> নতুন রিসোর্স মান, শুধুমাত্র উপস্থিত write অনুরোধ।
time টাইমস্ট্যাম্প সার্ভারের সময়টি উপস্থাপন করে এমন একটি টাইমস্ট্যাম্প যা অনুরোধটি মূল্যায়ন করা হয়।

রিসোর্স মূল্যায়ন

নিয়মের মূল্যায়ন করার সময়, আপনি আপলোড করা, ডাউনলোড, সংশোধন করা, বা মুছে ফেলা ফাইলটির মেটাডেটাও মূল্যায়ন করতে চাইতে পারেন। এটি আপনাকে জটিল এবং শক্তিশালী নিয়ম তৈরি করতে দেয় যা কিছু নির্দিষ্ট সামগ্রীযুক্ত ফাইলগুলি কেবল আপলোড করার অনুমতি দেয় বা নির্দিষ্ট আকারের চেয়ে বড় ফাইলগুলি মুছতে পারে things

ক্লাউড স্টোরেজ জন্য Firebase সিকিউরিটি রুলস ফাইল মেটাডাটা প্রদান করে resource বস্তু, যার মেটাডেটা চাবি / মান জোড়া একটি ক্লাউড স্টোরেজ বস্তু surfaced ধারণ করে। এই বৈশিষ্ট্য পরিদর্শন করা যেতে পারে read বা write অনুরোধ তথ্য অখণ্ডতা নিশ্চিত করতে হবে।

উপর write অনুরোধ (যেমন আপলোড, মেটাডাটা আপডেট, এবং মোছাগুলিকে হিসাবে), ছাড়াও resource বস্তু, যার ফাইল বর্তমানে বিদ্যমান অনুরোধ পথ এ, এছাড়াও আপনি ব্যবহার করার ক্ষমতা আছে তাদের জন্য ফাইলগুলির মেটাডেটা রয়েছে request.resource বস্তু, এতে লেখার অনুমতি থাকলে ফাইলের মেটাডেটার একটি সাবসেট থাকে। আপনি ডেটা অখণ্ডতা নিশ্চিত করতে বা ফাইলের ধরণ বা আকারের মতো অ্যাপ্লিকেশন সীমাবদ্ধতাগুলি প্রয়োগ করতে এই দুটি মান ব্যবহার করতে পারেন।

এ সম্পত্তি এর একটি পূর্ণ তালিকা resource বস্তুর নিচে পাওয়া যায়:

সম্পত্তি প্রকার বর্ণনা
name স্ট্রিং বস্তুর পুরো নাম
bucket স্ট্রিং এই বালতিটির নামটি এই বস্তুটির মধ্যে রয়েছে।
generation int Google মেঘ সংগ্রহস্থল বস্তুর প্রজন্ম এই বস্তুর।
metageneration int Google মেঘ সংগ্রহস্থল বস্তুর metageneration এই বস্তুর।
size int বাইটগুলিতে বস্তুর আকার।
timeCreated টাইমস্ট্যাম্প একটি বস্তু তৈরির সময়কে উপস্থাপন করে এমন একটি টাইমস্ট্যাম্প।
updated টাইমস্ট্যাম্প কোনও অবজেক্টের সর্বশেষ আপডেট হওয়া সময়ের প্রতিনিধিত্বকারী একটি টাইমস্ট্যাম্প।
md5Hash স্ট্রিং অবজেক্টের একটি MD5 হ্যাশ।
crc32c স্ট্রিং বস্তুর একটি crc32c হ্যাশ।
etag স্ট্রিং এই অবজেক্টের সাথে সম্পর্কিত ইটাগ।
contentDisposition স্ট্রিং এই বিষয়বস্তুর সাথে সম্পর্কিত বিষয়বস্তু প্রদর্শন।
contentEncoding স্ট্রিং এই বস্তুর সাথে সম্পর্কিত সামগ্রী এনকোডিং।
contentLanguage স্ট্রিং এই বস্তুর সাথে সম্পর্কিত বিষয়বস্তুর ভাষা।
contentType স্ট্রিং এই বস্তুর সাথে সম্পর্কিত সামগ্রী প্রকার type
metadata মানচিত্র <স্ট্রিং, স্ট্রিং> কী / অতিরিক্ত জোড়ার অতিরিক্ত, বিকাশকারী কাস্টম মেটাডেটা নির্দিষ্ট করেছে।

request.resource বাদ দিয়ে এই সব রয়েছে generation , metageneration , etag , timeCreated , এবং updated

তথ্য বৈধ করুন

ক্লাউড স্টোরেজ জন্য Firebase সিকিউরিটি রুলস এছাড়াও ডেটা যাচাইকরণ ব্যবহার করা যেতে পারে, ফাইল নাম এবং পাথ সেইসাথে যেমন ফাইলগুলির মেটাডেটা বৈশিষ্ট্য যাচাই সহ contentType এবং size

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

কাস্টম ফাংশন

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

  • কার্যাবলী শুধুমাত্র একটি একক ধারণ করতে পারে return বিবৃতি। এগুলিতে কোনও অতিরিক্ত যুক্তি থাকতে পারে না। উদাহরণস্বরূপ, তারা লুপগুলি কার্যকর করতে বা বাহ্যিক পরিষেবাগুলিতে কল করতে পারে না।
  • ফাংশনগুলি স্বয়ংক্রিয়ভাবে ফাংশন এবং ভেরিয়েবলগুলিকে অ্যাক্সেস করতে পারে যে পরিমাণ থেকে তাদের সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, একটি ফাংশন মধ্যে সংজ্ঞায়িত service firebase.storage সুযোগ অ্যাক্সেস আছে resource পরিবর্তনশীল, এবং ক্লাউড Firestore শুধুমাত্র আপনিই দেখতে বিল্ট-ইন ফাংশন যেমন get() এবং exists()
  • ফাংশনগুলি অন্যান্য ফাংশনগুলিতে কল করতে পারে তবে পুনরাবৃত্তি হতে পারে না। মোট কল স্ট্যাকের গভীরতা 10 এর মধ্যে সীমাবদ্ধ।
  • সংস্করণে rules2 , ফাংশন ব্যবহার করে ভেরিয়েবল নির্ধারণ করতে পারবেন let শব্দ। ফাংশনগুলিতে যেকোন সংখ্যক লেট বাইন্ডিং থাকতে পারে তবে তার অবশ্যই একটি রিটার্ন বিবৃতি দিয়ে শেষ করা উচিত।

একটি ফাংশন সংজ্ঞায়িত করা হয় function শব্দ এবং শূন্য বা তার বেশি আর্গুমেন্ট লাগে। উদাহরণস্বরূপ, আপনি উপরের উদাহরণগুলিতে ব্যবহৃত দুটি ধরণের শর্তগুলি একটি ফাংশনে একত্রিত করতে চাইতে পারেন:

service firebase.storage {
  match /b/{bucket}/o {
    // True if the user is signed in or the requested data is 'public'
    function signedInOrPublic() {
      return request.auth.uid != null || resource.data.visibility == 'public';
    }
    match /images/{imageId} {
      allow read, write: if signedInOrPublic();
    }
    match /mp3s/{mp3Ids} {
      allow read: if signedInOrPublic();
    }
  }
}

আপনার ফায়ারবেস সুরক্ষা বিধিগুলিতে ফাংশনগুলি ব্যবহার করা আপনার নিয়মের জটিলতা বাড়ার সাথে এগুলি আরও রক্ষণাবেক্ষণযোগ্য করে তোলে।

পরবর্তী পদক্ষেপ

শর্তগুলির এই আলোচনার পরে, আপনি বিধি সম্পর্কে আরও পরিশীলিত বোঝাপড়া পেয়েছেন এবং এর জন্য প্রস্তুত:

কীভাবে মূল ব্যবহারের কেসগুলি পরিচালনা করবেন এবং নিয়মগুলি বিকাশ, পরীক্ষা ও স্থাপনের জন্য কর্মপ্রবাহ শিখুন: