рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рдпрдо

Firebase Security Rules рдХреА рдорджрдж рд╕реЗ, рд╕реЗрд╡ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рдРрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдРрд╕реЗ рдирд┐рдпрдо рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдореИрдЪ рдХрд░рддреЗ рд╣реЛрдВ. рдЬреИрд╕реЗ, рдкреВрд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рд▓реЗрдХрд░, рдХрд┐рд╕реА рдЦрд╛рд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡реЛрдВ рддрдХ.

рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреЗ рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ. рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝реЗ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рдпрдо рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЗрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП: рдпреЗ рдирд┐рдпрдо рдХрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ рдФрд░ рдЗрдирдХрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ.

рдЕрдкрдиреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Firebase Security Rules рдХреЛ рдореИрдиреЗрдЬ рдФрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдирд╛ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ.

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рдпрдо: рд▓реЙрдХ рдореЛрдб

Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рддреЗ рд╕рдордп, рдпрд╣ рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ Firebase Security Rules рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдРрдХреНрд╕реЗрд╕ рдкрд░ рдкрд╛рдмрдВрджреА рд▓рдЧрд╛рдИ рдЬрд╛рдП (рд▓реЙрдХ рдореЛрдб) рдпрд╛ рдХрд┐рд╕реА рдХреЛ рднреА рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдП (рдЯреЗрд╕реНрдЯ рдореЛрдб). Cloud Firestore рдФрд░ Realtime Database рдореЗрдВ, рд▓реЙрдХ рдореЛрдб рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рддрд╣рдд, рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рддреА. Cloud Storage рдореЗрдВ, рд╕рд┐рд░реНрдлрд╝ рдкреБрд╖реНрдЯрд┐ рдХрд┐рдП рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реА рд╕реНрдЯреЛрд░реЗрдЬ рдмрдХреЗрдЯ рдРрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ.

Cloud Firestore

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

Realtime Database

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

Cloud Storage

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

рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ-рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдХреЗ рдирд┐рдпрдо

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХрд╛ рдРрдХреНрд╕реЗрд╕ рдЬрд╝реНрдпрд╛рджрд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рджреЗрдирд╛ рд╣реЛ. рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, Rules рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ. рдпрд╣ рднреА рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддреМрд░ рдкрд░ рдРрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рднрд▓реЗ рд╣реА, рдЖрдкрдиреЗ рдЙрд╕реЗ рд▓реЙрдиреНрдЪ рди рдХрд┐рдпрд╛ рд╣реЛ.

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ Firebase, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, Firebase Security Rules рд╣реА рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдРрдХреНрд╕реЗрд╕ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ. рдкреНрд░реЙрдбрдХреНрдЯ рд▓реЙрдЬрд┐рдХ рд╕реЗ рдЕрд▓рдЧ рдирд┐рдпрдо рддрдп рдХрд░рдиреЗ рдХреЗ рдХрдИ рдлрд╝рд╛рдпрджреЗ рд╣реИрдВ: рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реБрд░рдХреНрд╖рд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдирд╣реАрдВ рд╣реЛрддреА, рдЧрдбрд╝рдмрдбрд╝реА рд╡рд╛рд▓реЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╕реЗ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдЦрддрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рд╕рдмрд╕реЗ рдЬрд╝рд░реВрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдЗрдВрдЯрд░рдореАрдбрд┐рдпрд░реА рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд░рд╣рдирд╛ рдкрдбрд╝реЗрдЧрд╛.

рдкреБрд╖реНрдЯрд┐ рдХрд┐рдП рдЧрдП рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛

рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдЗрди рдЗрди рдХрд┐рдП рд╣реБрдП рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рди рджреЗрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдк рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди, рдкреБрд╖реНрдЯрд┐ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдРрдХреНрд╕реЗрд╕ рд╕реЗрдЯ рдХрд░рдирд╛ рдорджрджрдЧрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.

Cloud Firestore

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

Realtime Database

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

Cloud Storage

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

рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд┐рдпрдо

рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрдХреНрдХрд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдбреЗрдЯрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдРрдХреНрд╕реЗрд╕ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрдХреНрд╕реЗрд╕ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Authentication рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рд╕рд╛рде рд╣реА, рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрдХреНрд╕реЗрд╕ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реАрдзреЗ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкрдврд╝реЗрдВ.

рдбреЗрдЯрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╕рдордп рдирд┐рдпрдо рд▓рд┐рдЦреЗрдВ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╛рде рдкрд░ рдбреЗрдЯрд╛ рдХреЗ рдРрдХреНрд╕реЗрд╕ рдкрд░ рдкрд╛рдмрдВрджреА рд▓рдЧрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдЕрд╕рд░ рдкрдбрд╝рддрд╛ рд╣реИ.

рд╕рд┐рд░реНрдлрд╝ рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рдкрд╛рд╕ рдРрдХреНрд╕реЗрд╕ рд╣реЛрдирд╛

рдЗрди рдирд┐рдпрдореЛрдВ рдХреЗ рддрд╣рдд, рд╕рд┐рд░реНрдлрд╝ рдкреБрд╖реНрдЯрд┐ рдХрд┐рдП рдЧрдП рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЛ рд╣реА рдЙрд╕рдХрд╛ рдРрдХреНрд╕реЗрд╕ рдорд┐рд▓рддрд╛ рд╣реИ. рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдбреЗрдЯрд╛ рдкрд╛рде рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЖрдИрдбреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ.

рдпрд╣ рдирд┐рдпрдо рдХрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдирд┐рдпрдо рддрдм рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдбреЗрдЯрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реЛ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рд╕рд┐рд░реНрдлрд╝ рд╡рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдРрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЙрд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ.

рдпрд╣ рдирд┐рдпрдо рдХрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛: рдпрд╣ рдирд┐рдпрдо рддрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рдЬрдм рдПрдХ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЛ рд▓рд┐рдЦрдирд╛ рдпрд╛ рдкрдврд╝рдирд╛ рд╣реЛ. рдРрд╕реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджреЗрдВрдЧреЗ рдпрд╛ рдЕрдкрдиреЗ рдмрдирд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ.

рдпрд╣ рдирд┐рдпрдо рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдРрд╕рд╛ рдирд┐рдпрдо рдмрдирд╛рдПрдВ рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдпрд╛ рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рдРрдХреНрд╕реЗрд╕ рдорд╛рдВрдЧрдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЙрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ.

Cloud Firestore

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

Realtime Database

{
  "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"
      }
    }
  }
}

Cloud Storage

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

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рдРрдХреНрд╕реЗрд╕, рджреЛрдиреЛрдВ

рдЗрд╕ рдирд┐рдпрдо рдХреЗ рддрд╣рдд, рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдХреЛрдИ рднреА рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкрд╛рде рдкрд░ рдбреЗрдЯрд╛ рдмрдирд╛рдиреЗ рдпрд╛ рдЙрд╕рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╕рд┐рд░реНрдлрд╝ рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЗ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣рдХ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╣реИ.

рдпрд╣ рдирд┐рдпрдо рдХрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдирд┐рдпрдо рдЙрди рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд░рд╣рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддреМрд░ рдкрд░ рдкрдврд╝реЗ рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдПрд▓рд┐рдореЗрдВрдЯ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрди рдПрд▓рд┐рдореЗрдВрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдРрдХреНрд╕реЗрд╕ рдХреЛ рд╕рд┐рд░реНрдлрд╝ рдЙрдирдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдорд┐рдд рд░рдЦрдирд╛ рд╣реЛрддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреИрдЯ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдмреНрд▓реЙрдЧ.

рдпрд╣ рдирд┐рдпрдо рдХрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛: рд╕рд┐рд░реНрдлрд╝ рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рдирд┐рдпрдо рдХреА рддрд░рд╣, рдпрд╣ рдирд┐рдпрдо рднреА рддрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рдЬрдм рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛ. рдЖрдЦрд┐рд░ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ-рджреВрд╕рд░реЗ рдХрд╛ рдбреЗрдЯрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджреЗрдВрдЧреЗ.

рдпрд╣ рдирд┐рдпрдо рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдРрд╕рд╛ рдирд┐рдпрдо рдмрдирд╛рдПрдВ рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ (рдпрд╛ рдкреБрд╖реНрдЯрд┐ рдХрд┐рдП рдЧрдП рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ) рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХрд╛ рдРрдХреНрд╕реЗрд╕ рдЪрд╛рд▓реВ рд╣реЛ. рд╕рд╛рде рд╣реА, рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЙрд╕рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ.

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow public read access, but only content owners can write
    match /some_collection/{document} {
      // Allow public reads
      allow read: if true
      // Allow creation if the current user owns the new document
      allow create: if request.auth.uid == request.resource.data.author_uid;
      // Allow updates by the owner, and prevent change of ownership
      allow update: if request.auth.uid == request.resource.data.author_uid
                    && request.auth.uid == resource.data.author_uid;
      // Allow deletion if the current user owns the existing document
      allow delete: if request.auth.uid == resource.data.author_uid;
    }
  }
}

Realtime Database

{
// 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"
      }
    }
  }
}

Cloud Storage

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

рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдФрд░ рднреВрдорд┐рдХрд╛ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдРрдХреНрд╕реЗрд╕

рдЗрди рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рддрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛. Firebase Security Rules рдРрдХреНрд╕реЗрд╕ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдпрд╛ рдЙрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ.

рдпрд╣ рдирд┐рдпрдо рдХрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреЛрдИ рднреВрдорд┐рдХрд╛ рдЕрд╕рд╛рдЗрди рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рдЗрд╕ рдирд┐рдпрдо рдХреА рдорджрдж рд╕реЗ, рднреВрдорд┐рдХрд╛рдУрдВ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЦрд╛рд╕ рдЧреНрд░реБрдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрдХреНрд╕реЗрд╕ рдХреЛ рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдЧреНрд░реЗрдб рд╕реЗрд╡ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ "рдЫрд╛рддреНрд░/рдЫрд╛рддреНрд░рд╛рдПрдВ" рдЧреНрд░реБрдк (рд╕рд┐рд░реНрдлрд╝ рдЕрдкрдирд╛ рдХреЙрдиреНрдЯреЗрдВрдЯ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП), "рд╢рд┐рдХреНрд╖рдХ" рдЧреНрд░реБрдк (рдЕрдкрдиреЗ рд╡рд┐рд╖рдп рдореЗрдВ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП), рдФрд░ "рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓" рдЧреНрд░реБрдк (рдкреВрд░рд╛ рдХреЙрдиреНрдЯреЗрдВрдЯ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓реЗрд╡рд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ.

рдпрд╣ рдирд┐рдпрдо рдХрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛: Realtime Database рдФрд░ Cloud Storage рдореЗрдВ, рдЖрдкрдХреЗ рдирд┐рдпрдо get() рдХреЗ рдЙрд╕ рддрд░реАрдХреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ Cloud Firestore рдХреЗ рдирд┐рдпрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рддрд╛рдХрд┐ рдЙрди рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬрд┐рдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рд╣реИ.

рдпрд╣ рдирд┐рдпрдо рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: Cloud Firestore рдореЗрдВ, рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдРрд╕рд╛ рдлрд╝реАрд▓реНрдб рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдкрдврд╝ рд╕рдХреЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдРрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдирд┐рдпрдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ. Realtime Database рдореЗрдВ, рдПрдХ рдРрд╕рд╛ рдбреЗрдЯрд╛ рдкрд╛рде рдмрдирд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реЛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд╛рдЗрд▓реНрдб рдиреЛрдб рдореЗрдВ рднреВрдорд┐рдХрд╛ рджреЗрддрд╛ рд╣реЛ.

Authentication рдореЗрдВ рдХрд╕реНрдЯрдо рджрд╛рд╡реЗ рднреА рд╕реЗрдЯ рдЕрдк рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдХрд┐рд╕реА рднреА Firebase Security Rules рдореЗрдВ auth.token рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рдкрд╕ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ.

рдбреЗрдЯрд╛ рд╕реЗ рддрдп рдХрд┐рдП рдЧрдП рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдФрд░ рднреВрдорд┐рдХрд╛рдПрдВ

рдпреЗ рдирд┐рдпрдо рд╕рд┐рд░реНрдлрд╝ Cloud Firestore рдФрд░ Realtime Database рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ.

Cloud Firestore

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЬрдм рднреА рдЖрдкрдХреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдирд┐рдпрдореЛрдВ рдХреА рддрд░рд╣ рдХреЛрдИ рд░реАрдб рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ Cloud Firestore рдореЗрдВ рд░реАрдб рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдкрд╕реЗ рд╢реБрд▓реНрдХ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

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

Realtime Database

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

рдХрд╕реНрдЯрдо-рджрд╛рд╡реЗ рд╡рд╛рд▓реЗ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдФрд░ рднреВрдорд┐рдХрд╛рдПрдВ

рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Firebase Authentication рдореЗрдВ рдХрд╕реНрдЯрдо рджрд╛рд╡реЗ рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рджрд╛рд╡реЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // For attribute-based access control, check for an administrator 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";
   }
  }
}

Realtime Database

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

Cloud Storage

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

рдХрд┐рд░рд╛рдпреЗ рдХреА рдЕрд╡рдзрд┐ рдХреЗ рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ

рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Google Cloud Identity Platform (GCIP) рдореЗрдВ рдорд▓реНрдЯреА-рдЯреЗрдиреЗрдВрд╕реА рд╕реЗрдЯ рдЕрдк рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдирд┐рдпрдореЛрдВ рдореЗрдВ рдЯреЗрдиреЗрдВрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдХрд┐рд╕реА рдЦрд╛рд╕ рдХрд┐рд░рд╛рдпреЗрджрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, tenant2-m6tyz

Cloud Firestore

service cloud.firestore {
  match /databases/{database}/documents {
    // For tenant-based access control, check for a tenantID
    allow write: if request.auth.token.firebase.tenant == 'tenant2-m6tyz';
    allow read: true;
  }
}

Realtime Database

{
  "rules": {
    "some_path": {
      "$uid": {
        // Only allow reads and writes if user belongs to a specific tenant
        ".write": "auth.uid !== null && auth.token.firebase.tenant === 'tenant2-m6tyz'",
        ".read": "auth.uid !== null
      }
    }
  }
}

Cloud Storage

service firebase.storage {
  // Only allow reads and writes if user belongs to a specific tenant
  match /files/{tenantId}/{fileName} {
    allow read: if request.auth != null;
    allow write: if request.auth.token.firebase.tenant == tenantId;
  }
}