Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

বেসিক সুরক্ষা বিধি

ফায়ারবেস সিকিউরিটি রুলস আপনাকে আপনার সঞ্চিত ডেটার অ্যাক্সেস নিয়ন্ত্রণ করতে দেয়। নমনীয় নিয়ম সিনট্যাক্স মানে আপনি এমন কিছু নিয়ম তৈরি করতে পারেন যা কোন কিছুর সাথে মিলে যায়, সমস্ত লেখা থেকে শুরু করে পুরো ডাটাবেস পর্যন্ত একটি নির্দিষ্ট নথিতে কাজ করে।

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

আপনার নিয়ম আপডেট অ্যাক্সেস করার জন্য ও, পদক্ষেপ রূপরেখা অনুসরণ পরিচালনা এবং স্থাপন Firebase সিকিউরিটি রুলস

ডিফল্ট নিয়ম: লক মোড

আপনি যখন Firebase কনসোলে একটি ডাটাবেস বা স্টোরেজ উদাহরণস্বরূপ তৈরি করেন, আপনি আপনার Firebase সিকিউরিটি বিধি (লক মোড) আপনার ডেটা অ্যাক্সেস সীমাবদ্ধ কেউ এক্সেস (টেস্ট মোড) অনুমতি দেয় কিনা। ক্লাউড Firestore এবং রিয়েলটাইম ডাটাবেসের মধ্যে, লক মোডের জন্য ডিফল্ট নিয়ম সকল ব্যবহারকারীর জন্য অ্যাক্সেস অস্বীকার। ক্লাউড স্টোরেজে, শুধুমাত্র অনুমোদিত ব্যবহারকারীরা স্টোরেজ বালতিগুলি অ্যাক্সেস করতে পারে।

ক্লাউড ফায়ারস্টোর

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

রিয়েলটাইম ডাটাবেস

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

মেঘ স্টোরেজ

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

উন্নয়ন-পরিবেশের নিয়ম

যখন আপনি আপনার অ্যাপে কাজ করছেন, আপনি আপনার ডেটাতে অপেক্ষাকৃত উন্মুক্ত বা নিরপেক্ষ অ্যাক্সেস চাইতে পারেন। আপনার অ্যাপটি উৎপাদনে স্থাপন করার আগে আপনার নিয়মগুলি আপডেট করতে ভুলবেন না। এটিও স্মরণে রাখুন যে আপনি যদি আপনার অ্যাপ স্থাপন, এটা প্রকাশ্যে অ্যাক্সেসযোগ্য - এমনকি যদি আপনি এটি চালু করেন নি।

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

সমস্ত অনুমোদিত ব্যবহারকারী

যদিও আমরা সাইন ইন করা কোনো ব্যবহারকারীর কাছে আপনার ডেটা অ্যাক্সেসযোগ্য রাখার সুপারিশ করি না, আপনি যখন আপনার অ্যাপ ডেভেলপ করছেন তখন যে কোনও অনুমোদিত ব্যবহারকারীর অ্যাক্সেস সেট করা দরকারী হতে পারে।

ক্লাউড ফায়ারস্টোর

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

রিয়েলটাইম ডাটাবেস

{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

মেঘ স্টোরেজ

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

উৎপাদনের জন্য প্রস্তুত নিয়ম

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

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

কন্টেন্ট-মালিক শুধুমাত্র অ্যাক্সেস

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

যখন এই নিয়ম কাজ এই নিয়ম ভাল কাজ করে তথ্য ব্যবহারকারীর দ্বারা siled হলে - যদি চাহিদা ডেটা অ্যাক্সেস করতে যেটি শুধুমাত্র ব্যবহারকারী একই ব্যবহারকারীর তথ্য তৈরি করেছেন।

যখন এই নিয়ম কাজ করে না: - ব্যবহারকারীদের ডেটাকে ওভাররাইট বা অ্যাক্সেস ডেটা তারা তৈরি করেছি করতে পারবে না এই ruleset যখন একাধিক ব্যবহারকারী লেখার প্রয়োজন বা একই ডেটা পড়তে না কাজ করে।

এই নিয়ম সেট আপ করার জন্য: একটি নিয়ম যে তার সমর্থক ব্যবহারকারী অ্যাক্সেস চাইছে পড়তে বা লিখতে ডেটা ব্যবহারকারী যে তথ্য মালিক তৈরি করুন।

ক্লাউড ফায়ারস্টোর

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{userId}/{documents=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId
    }
  }
}

রিয়েলটাইম ডাটাবেস

{
  "rules": {
    "some_path": {
      "$uid": {
        // Allow only authenticated content owners access to their data
        ".read": "auth != null && auth.uid == $uid"
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}

মেঘ স্টোরেজ

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId;
    }
  }
}

মিশ্র পাবলিক এবং প্রাইভেট অ্যাক্সেস

এই নিয়মটি যে কাউকে একটি ডেটা সেট পড়তে দেয়, কিন্তু শুধুমাত্র অনুমোদিত বিষয়বস্তুর মালিককে প্রদত্ত পথে ডেটা তৈরি বা সংশোধন করার ক্ষমতা সীমাবদ্ধ করে।

যখন এই নিয়ম কাজ করে: এই নিয়ম সর্বজনীনবাবে পাঠযোগ্য উপাদানের প্রয়োজন অ্যাপসের জন্য ভাল কাজ করে, কিন্তু যারা উপাদান 'মালিকদের সম্পাদনার অ্যাক্সেস সীমাবদ্ধ করতে হবে। উদাহরণস্বরূপ, একটি চ্যাট অ্যাপ বা ব্লগ।

যখন এই নিয়ম কাজ করে না: সামগ্রী-মালিক মতো শুধুমাত্র নিয়ম, এই ruleset কাজ যখন একাধিক ব্যবহারকারী একই ডাটা এডিট করতে হবে না। ব্যবহারকারীরা চূড়ান্তভাবে একে অপরের ডেটা ওভাররাইট করবে।

এই নিয়ম সেট আপ করার জন্য: একটি নিয়ম যে সমস্ত ব্যবহারকারী (বা সকলের প্রামাণ ব্যবহারকারী), এবং তার সমর্থক ব্যবহারকারী লেখা ডেটা মালিক জন্য পড়ার অ্যাক্সেস সক্ষম তৈরি করুন।

ক্লাউড ফায়ারস্টোর

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      allow read: if true
      allow create: if request.auth.uid == request.resource.data.author_uid;
      allow update, delete: if request.auth.uid == resource.data.author_uid;
    }
  }
}

রিয়েলটাইম ডাটাবেস

{
// Allow anyone to read data, but only authenticated content owners can
// make changes to their data

  "rules": {
    "some_path": {
      "$uid": {
        ".read": true,
        // or ".read": "auth.uid != null" for only authenticated users
        ".write": "auth.uid == $uid"
      }
    }
  }
}

মেঘ স্টোরেজ

service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read;
      allow write: if request.auth.uid == userId;
    }
  }
}

বৈশিষ্ট্য-ভিত্তিক এবং ভূমিকা-ভিত্তিক অ্যাক্সেস

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

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

এই নিয়ম কাজ করে না কখন: ইন রিয়েলটাইম ডাটাবেস এবং ক্লাউড স্টোরেজ, আপনার নিয়ম লিভারেজ করতে পারবে না get() পদ্ধতি হল ক্লাউড Firestore নিয়ম একত্রীভূত করতে পারেন। ফলস্বরূপ, আপনি আপনার নিয়মগুলিতে যে বৈশিষ্ট্যগুলি ব্যবহার করছেন তা প্রতিফলিত করতে আপনার ডাটাবেস বা ফাইল মেটাডেটা গঠন করতে হবে।

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

এছাড়াও আপনি সেট আপ করতে পারেন প্রমাণীকরণ কাস্টম দাবি এবং তারপর থেকে যে তথ্য পুনরুদ্ধার auth.token কোনো Firebase সিকিউরিটি রুলস মধ্যে পরিবর্তনশীল।

ডেটা-সংজ্ঞায়িত বৈশিষ্ট্য এবং ভূমিকা

এই নিয়মগুলি কেবল ক্লাউড ফায়ারস্টোর এবং রিয়েলটাইম ডেটাবেসে কাজ করে।

ক্লাউড ফায়ারস্টোর

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

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, Check a boolean `admin` attribute
    allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
   }
  }
}

রিয়েলটাইম ডাটাবেস

{
  "rules": {
    "some_path": {
      "${subpath}": {
        //
        ".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'",
        ".read": true
      }
    }
  }
}

কাস্টম-দাবি বৈশিষ্ট্য এবং ভূমিকা

এই নিয়ম বাস্তবায়ন, সেট আপ করতে কাস্টম দাবি Firebase প্রমাণীকরণ মধ্যে এবং তারপর আপনার নিয়ম দাবী লাভ নিন।

ক্লাউড ফায়ারস্টোর

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

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, check for an admin claim
    allow write: if request.auth.token.admin == true;
    allow read: true;

    // Alterntatively, for role-based access, assign specific roles to users
    match /some_collection/{document} {
     allow read: if request.auth.token.reader == "true";
     allow write: if request.auth.token.writer == "true";
   }
  }
}

রিয়েলটাইম ডাটাবেস

{
  "rules": {
    "some_path": {
      "$uid": {
        // Create a custom claim for each role or group
        // you want to leverage
        ".write": "auth.uid != null && auth.token.writer == true",
        ".read": "auth.uid != null && auth.token.reader == true"
      }
    }
  }
}

মেঘ স্টোরেজ

service firebase.storage {
  // 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;
  }
}