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