Firebase āĻāĻĒāύāĻžāĻā§ āĻāĻĒāύāĻžāϰ Rules āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāĻžāϰ āĻāύā§āϝ āĻŦā§āĻļ āĻāϝāĻŧā§āĻāĻāĻŋ āϏāϰāĻā§āĻāĻžāĻŽ āϏāϰāĻŦāϰāĻžāĻš āĻāϰā§, āĻĒā§āϰāϤāĻŋāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āώā§āϤā§āϰ⧠āĻāĻžāϰā§āϝāĻāϰ āĻāĻŦāĻ āĻĒā§āϰāϤā§āϝā§āĻāĻāĻŋ āĻāĻāĻ āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ Firebase āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āύāĻŋāϝāĻŧāĻŽ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤
āĻāĻāĻŋ āĻāĻžāϞ⧠āĻāϰāĻžāϰ āĻāύā§āϝ āĻā§āύ āĻā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ āύāĻž āĻā§āύ, āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž API:
- āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽā§āϰ āĻā§āϏ āĻāύāĻā§āϏā§āĻ āĻāϰā§: āύāĻŋāϝāĻŧāĻŽā§āϰ āĻāĻāĻāĻŋ āϏā§āĻ, āϏāĻžāϧāĻžāϰāĻŖāϤ Firebase Security Rules āĻŦāĻŋāĻŦā§āϤāĻŋ āϧāĻžāϰāĻŖāĻāĻžāϰ⧠āĻāĻāĻāĻŋ āĻā§āĻĄ āĻĢāĻžāĻāϞāĨ¤
- āĻāĻāĻāĻŋ āĻ āĻĒāϰāĻŋāĻŦāϰā§āϤāύā§āϝāĻŧ āϰā§āϞāϏā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻā§āϰāĻšāĻŖ āĻāϰāĻž āĻā§āϏ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āĨ¤
- āĻāĻāĻāĻŋ āϰāĻŋāϞāĻŋāĻā§ āĻĒā§āϰāϤāĻŋāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻā§āϰ āϏā§āĻĨāĻžāĻĒāύāĻž āĻā§āϰā§āϝāĻžāĻ āĻāϰā§āĨ¤ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻŦāĻŋāϧāĻŋ-āϏāĻā§āώāĻŽ āĻĒāϰāĻŋāώā§āĻŦāĻžāĻā§āϞāĻŋ āĻāĻāĻāĻŋ āϏā§āϰāĻā§āώāĻŋāϤ āϏāĻŽā§āĻĒāĻĻā§āϰ āĻāύā§āϝ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻ āύā§āϰā§āϧā§āϰ āĻŽā§āϞā§āϝāĻžāϝāĻŧāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻāύā§āϝ āϰāĻŋāϞāĻŋāĻ āϏāύā§āϧāĻžāύ āĻāϰā§āĨ¤
- āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻā§āϰ āϏāĻŋāύāĻā§āϝāĻžāĻāĻāĻŋāĻ āĻāĻŦāĻ āĻļāĻŦā§āĻĻāĻžāϰā§āĻĨāĻŋāĻ āĻĒāϰā§āĻā§āώāĻž āĻāĻžāϞāĻžāύā§āϰ āĻā§āώāĻŽāϤāĻž āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤
Firebase CLI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
Firebase CLI-āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻāĻĒāύāĻŋ āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻā§āϏāĻā§āϞāĻŋ āĻāĻĒāϞā§āĻĄ āĻāϰāϤ⧠āĻāĻŦāĻ āϰāĻŋāϞāĻŋāĻāĻā§āϞāĻŋ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ⧎ CLI āĻāϰ Firebase Local Emulator Suite āĻāĻĒāύāĻžāĻā§ āĻāϤā§āϏāĻā§āϞāĻŋāϰ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āϏā§āĻĨāĻžāύā§āϝāĻŧ āĻĒāϰā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĻā§āϝāĻŧ⧎
CLI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻā§āĻĄ āϏāĻš āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋāĻā§ āϏāĻāϏā§āĻāϰāĻŖ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖā§ āϰāĻžāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤
āĻāĻāĻāĻŋ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āύ
āĻāĻĒāύāĻŋ āϝāĻāύ Firebase CLI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻĒāύāĻžāϰ Firebase āĻĒā§āϰāĻāϞā§āĻĒ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰā§āύ, āϤāĻāύ āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āĻāĻāĻāĻŋ .rules
āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤ āĻāĻĒāύāĻžāϰ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āĻĒā§āϰāĻāϞā§āĻĒ āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻļā§āϰ⧠āĻāϰāϤ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ:
Cloud Firestore
// Set up Firestore in your project directory, creates a .rules file firebase init firestore
Realtime Database
// Set up Realtime Database in your project directory, creates a .rules file firebase init database
Cloud Storage
// Set up Storage in your project directory, creates a .rules file firebase init storage
āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāĻŦāĻ āĻāĻĒāĻĄā§āĻ āĻāϰā§āύ
.rules
āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āĻĢāĻžāĻāϞ⧠āϏāϰāĻžāϏāϰāĻŋ āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽā§āϰ āĻā§āϏ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰā§āύāĨ¤
Firebase CLI-āϤ⧠āĻāĻĒāύāĻžāϰ āĻāϰāĻž āϝā§āĻā§āύ⧠āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž Firebase āĻāύāϏā§āϞ⧠āĻĒā§āϰāϤāĻŋāĻĢāϞāĻŋāϤ āĻšāϝāĻŧā§āĻā§ āĻŦāĻž āĻāĻĒāύāĻŋ Firebase āĻāύāϏā§āϞ āĻŦāĻž Firebase CLI āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻāĻāĻžāĻŦā§ āĻāĻĒāĻĄā§āĻ āĻāϰāĻā§āύ āĻāĻŋāύāĻž āϤāĻž āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύāĨ¤ āĻ āύā§āϝāĻĨāĻžāϝāĻŧ, āĻāĻĒāύāĻŋ Firebase āĻāύāϏā§āϞ⧠āĻāϰāĻž āϝā§āĻā§āύ⧠āĻāĻĒāĻĄā§āĻ āĻāĻāĻžāϰāϰāĻžāĻāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻĒāύāĻžāϰ āĻāĻĒāĻĄā§āĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ
Local Emulator Suite āϏāĻŽāϏā§āϤ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āύāĻŋāϝāĻŧāĻŽ-āϏāĻā§āώāĻŽ āĻĒāĻŖā§āϝā§āϰ āĻāύā§āϝ āĻāĻŽā§āϞā§āĻāϰ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻŽā§āϞā§āĻāϰā§āϰ āĻāύā§āϝ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻŦāĻŋāϧāĻŋ āĻāĻā§āĻāĻŋāύ āύāĻŋāϝāĻŧāĻŽā§āϰ āϏāĻŋāύāĻā§āϝāĻžāĻāĻāĻŋāĻ āĻāĻŦāĻ āĻļāĻŦā§āĻĻāĻžāϰā§āĻĨāĻŋāĻ āĻŽā§āϞā§āϝāĻžāϝāĻŧāύ āĻāĻāϝāĻŧāĻ āĻāϰā§, āĻāĻāĻāĻžāĻŦā§ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻŦāĻŋāϧāĻŋ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž API āĻ āĻĢāĻžāϰ āĻāϰ⧠āϏāĻŋāύāĻā§āϝāĻžāĻāĻāĻŋāĻ āĻĒāϰā§āĻā§āώāĻžāĻā§ āĻ āϤāĻŋāĻā§āϰāĻŽ āĻāϰā§āĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ CLI-āĻāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰā§āύ, Firebase Security Rules āĻĒāϰā§āĻā§āώāĻžāϰ āĻāύā§āϝ āϏā§āϝā§āĻ āĻāĻāĻāĻŋ āĻāĻŽā§āĻāĻžāϰ āĻā§āϞāĨ¤ āϏā§āĻĨāĻžāύā§āϝāĻŧāĻāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ āĻāĻĒāĻĄā§āĻāĻā§āϞāĻŋ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻāύā§āϝ Local Emulator Suite āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āĻāĻŦāĻ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āϝ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ Rules āĻāĻĒāύāĻŋ āϝ⧠āĻāĻāϰāĻŖāĻāĻŋ āĻāĻžāύ āϤāĻž āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰā§ā§ˇ
āĻāĻĒāύāĻžāϰ āĻāĻĒāĻĄā§āĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ
āĻāĻāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ Rules āĻāĻĒāĻĄā§āĻ āĻāĻŦāĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻĒāϰā§, āĻāϤā§āϏāĻā§āϞāĻŋāĻā§ āĻāϤā§āĻĒāĻžāĻĻāύ⧠āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ⧎
Cloud Firestore Security Rules āĻāύā§āϝ, āĻāĻĒāύāĻžāϰ firebase.json
āĻĢāĻžāĻāϞ āĻĒāϰā§āϝāĻžāϞā§āĻāύāĻž āĻ āĻāĻĒāĻĄā§āĻ āĻāϰ⧠āĻāĻĒāύāĻžāϰ āĻĄāĻŋāĻĢāϞā§āĻ āĻāĻŦāĻ āĻ
āϤāĻŋāϰāĻŋāĻā§āϤ āύāĻžāĻŽāĻā§āϤ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻžāĻĨā§ .rules
āĻĢāĻžāĻāϞāĻā§āϞāĻŋāĻā§ āϏāĻāϝā§āĻā§āϤ āĻāϰā§āύ⧎
āύāĻŋāϰā§āĻŦāĻžāĻāύā§āĻāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ Rules āĻāĻāĻž āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻŦāĻž āĻāĻĒāύāĻžāϰ āϏā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϰ āĻ āĻāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āϏā§āĻā§āϞāĻŋ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻāĻŽāĻžāύā§āĻĄāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ⧎
Cloud Firestore
// Deploy rules for all databases configured in your firebase.json firebase deploy --only firestore:rules
// Deploy rules for the specified database configured in your firebase.json firebase deploy --only firestore:<databaseId>
Realtime Database
// Deploy your .rules file firebase deploy --only database
Cloud Storage
// Deploy your .rules file firebase deploy --only storage
Firebase āĻāύāϏā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻĒāύāĻŋ Rules āĻāϤā§āϏāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āϏā§āĻā§āϞāĻŋāĻā§ Firebase āĻāύāϏā§āϞ āĻĨā§āĻā§ āĻĒā§āϰāĻāĻžāĻļ āĻšāĻŋāϏāĻžāĻŦā§ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ⧎ āĻāĻĒāύāĻŋ Firebase āĻāύāϏā§āϞ UI āĻ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰāĻžāϰ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āϏāĻŋāύāĻā§āϝāĻžāĻāĻāĻŋāĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ Rules āĻā§āϞāĻžāϰ āĻŽāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻļāĻŦā§āĻĻāĻžāϰā§āĻĨāĻŋāĻ āĻĒāϰā§āĻā§āώāĻž āĻāĻĒāϞāĻŦā§āϧāĨ¤
āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāĻŦāĻ āĻāĻĒāĻĄā§āĻ āĻāϰā§āύ
- Firebase āĻāύāϏā§āϞ āĻā§āϞā§āύ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āύ.
- āϤāĻžāϰāĻĒāϰ, āĻĒāĻŖā§āϝ āύā§āĻāĻŋāĻā§āĻļāύ āĻĨā§āĻā§ Realtime Database , Cloud Firestore āĻŦāĻž āϏā§āĻā§āϰā§āĻ āύāĻŋāϰā§āĻŦāĻžāĻāύ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ Rules āϏāĻŽā§āĻĒāĻžāĻĻāĻā§ āύā§āĻāĻŋāĻā§āĻ āĻāϰāϤ⧠āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋāϤ⧠āĻā§āϞāĻŋāĻ āĻāϰā§āύ⧎
- āϏāϰāĻžāϏāϰāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāĻā§ āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰā§āύāĨ¤
āĻāĻĒāύāĻžāϰ āĻāĻĒāĻĄā§āĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ
āϏāĻŽā§āĻĒāĻžāĻĻāĻ UI-āϤ⧠āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, āĻāĻĒāύāĻŋ Rules āĻā§āϞāĻžāϰ āĻŽāĻžāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāϰāĻžāϏāϰāĻŋ Firebase āĻāύāϏā§āϞ⧠āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻŦāĻ āϏā§āĻā§āϰā§āĻ āϰāĻŋāϏā§āϰā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻļāĻŦā§āĻĻāĻžāϰā§āĻĨāĻŋāĻ Rules āĻāĻāϰāĻŖ āĻĒāϰā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ Rules āϏāĻŽā§āĻĒāĻžāĻĻāĻā§ āύāĻŋāϝāĻŧāĻŽ āĻā§āϞāĻžāϰ āĻŽāĻžāĻ āϏā§āĻā§āϰā§āύ āĻā§āϞā§āύ, āϏā§āĻāĻŋāĻāϏ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰā§āύ āĻāĻŦāĻ āϰāĻžāύ āĻā§āϞāĻŋāĻ āĻāϰā§āύāĨ¤ āϏāĻŽā§āĻĒāĻžāĻĻāĻā§āϰ āĻļā§āϰā§āώ⧠āύāĻŋāĻļā§āĻāĻŋāϤāĻāϰāĻŖ āĻŦāĻžāϰā§āϤāĻžāĻāĻŋ āĻĻā§āĻā§āύāĨ¤
āĻāĻĒāύāĻžāϰ āĻāĻĒāĻĄā§āĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ
āĻāĻāĻŦāĻžāϰ āĻāĻĒāύāĻŋ āϏāύā§āϤā§āώā§āĻ āĻšāύ āϝ⧠āĻāĻĒāύāĻžāϰ āĻāĻĒāĻĄā§āĻāĻā§āϞāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž āĻ āύā§āϝāĻžāϝāĻŧā§, āĻĒā§āϰāĻāĻžāĻļ āĻāϰā§āύ āĻā§āϞāĻŋāĻ āĻāϰā§āύ⧎
āĻ ā§āϝāĻžāĻĄāĻŽāĻŋāύ SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
āĻāĻĒāύāĻŋ Node.js āϰā§āϞāϏā§āĻā§āϰ āĻāύā§āϝ Admin SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϝāĻžāĻāĻŋāĻ āĻ ā§āϝāĻžāĻā§āϏā§āϏā§āϰ āϏāĻžāĻĨā§, āĻāĻĒāύāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
- āύāĻŋāϝāĻŧāĻŽ āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻāύā§āϝ āĻāĻžāϏā§āĻāĻŽ āĻā§āϞ, āϏā§āĻā§āϰāĻŋāĻĒā§āĻ, āĻĄā§āϝāĻžāĻļāĻŦā§āϰā§āĻĄ āĻāĻŦāĻ CI/CD āĻĒāĻžāĻāĻĒāϞāĻžāĻāύ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰā§āύāĨ¤
- āĻāĻāĻžāϧāĻŋāĻ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āĻĒā§āϰāĻāϞā§āĻĒ āĻā§āĻĄāĻŧā§ āĻāϰāĻ āϏāĻšāĻā§ āύāĻŋāϝāĻŧāĻŽ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύāĨ¤
āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāϤāĻāĻžāĻŦā§ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āĻāĻĒāĻĄā§āĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϰ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖā§ āĻ āύāĻŋāĻā§āĻāĻžāĻā§āϤ āĻĒāϰāĻŋāĻŦāϰā§āϤāύāĻā§āϞāĻŋ āĻāĻĄāĻŧāĻžāϤ⧠āĻā§āĻŦāĻ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āϪ⧎ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻžāϰ āĻāĻĨāĻž āĻŽāĻžāĻĨāĻžāϝāĻŧ āϰā§āĻā§ āĻāĻĒāύāĻžāϰ Admin SDK āĻā§āĻĄ āϞāĻŋāĻā§āύ, āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āύāĻŋāϝāĻŧāĻŽ āĻāĻĒāĻĄā§āĻ āĻŦāĻž āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧāĨ¤
āĻāϰā§āĻāĻāĻŋ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻŦāĻŋāώāϝāĻŧ āĻŽāύ⧠āϰāĻžāĻāϤ⧠āĻšāĻŦā§ āϝ⧠Firebase Security Rules āĻĒā§āϰāĻāĻžāĻļāĻā§āϞāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖāϰā§āĻĒā§ āĻĒā§āϰāĻāĻžāϰāĻŋāϤ āĻšāϤ⧠āĻāϝāĻŧā§āĻ āĻŽāĻŋāύāĻŋāĻ āϏāĻŽāϝāĻŧ āύā§āϝāĻŧāĨ¤ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻžāϰ āĻāύā§āϝ Admin SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒ āĻ āĻŦāĻŋāϞāĻŽā§āĻŦā§ āϏā§āĻ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰ⧠āϝ⧠āϰā§āϏ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋāĻā§āϞāĻŋ āĻāĻĄāĻŧāĻžāϤ⧠āĻā§āϞāĻŦā§āύ āύāĻž āϝā§āĻā§āϞāĻŋāϰ āϏā§āĻĨāĻžāĻĒāύāĻž āĻāĻāύāĻ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāϝāĻŧāύāĻŋ⧎ āϝāĻĻāĻŋ āĻāĻĒāύāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰā§āϰ āĻā§āώā§āϤā§āϰ⧠āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖā§āϰ āύāĻŋāϝāĻŧāĻŽ āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāύ āĻāύ āĻāĻĒāĻĄā§āĻā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻšāϝāĻŧ, Cloud Firestore āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻŽāĻžāϧāĻžāύāĻā§āϞāĻŋ āĻŦāĻŋāĻŦā§āĻāύāĻž āĻāϰā§āύ, āϝāĻž āĻāύ āĻāύ āĻāĻĒāĻĄā§āĻ āĻšāĻāϝāĻŧāĻž āϏāϤā§āϤā§āĻŦā§āĻ āϰā§āϏā§āϰ āĻ āĻŦāϏā§āĻĨāĻž āĻāĻŽāĻžāϤ⧠āĻĄāĻŋāĻāĻžāĻāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻ āϏā§āĻŽāĻžāĻā§āϞāĻŋ āύā§āĻ āĻāϰā§āύ:
- āĻā§āϰāĻŽāĻŋāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āĻ āĻŦāĻļā§āϝāĻ UTF-8 āĻāύāĻā§āĻĄ āĻāϰāĻž āĻĒāĻžāĻ ā§āϝā§āϰ 256 KiB-āĻāϰ āĻĨā§āĻā§ āĻā§āĻ āĻšāϤ⧠āĻšāĻŦā§ā§ˇ
- āĻāĻāĻāĻŋ āĻĒā§āϰāĻāϞā§āĻĒā§ āϏāϰā§āĻŦāĻžāϧāĻŋāĻ 2500āĻāĻŋ āύāĻŋāϝāĻŧā§āĻāĻŋāϤ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻŦāĻžāϰ āĻāĻ āϏā§āĻŽāĻž āĻĒā§āĻāĻā§ āĻā§āϞā§, āύāϤā§āύ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāĻā§ āĻāĻĒāύāĻžāĻā§ āĻ āĻŦāĻļā§āϝāĻ āĻāĻŋāĻā§ āĻĒā§āϰāĻžāύ⧠āύāĻŋāϝāĻŧāĻŽ āĻŽā§āĻā§ āĻĢā§āϞāϤ⧠āĻšāĻŦā§ā§ˇ
Cloud Storage āĻŦāĻž Cloud Firestore āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύ āĻāĻŦāĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ
Admin SDK āϏāĻžāĻĨā§ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻŦāĻŋāϧāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻāϰā§āĻŽāĻĒā§āϰāĻŦāĻžāĻšā§ āϤāĻŋāύāĻāĻŋ āĻĒā§āĻĨāĻ āĻĒāĻĻāĻā§āώā§āĻĒ āĻ āύā§āϤāϰā§āĻā§āĻā§āϤ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§:
- āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āĻĢāĻžāĻāϞ āĻā§āϏ āϤā§āϰāĻŋ āĻāϰā§āύ (āĻāĻā§āĻāĻŋāĻ)
- āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύ
- āϰāĻŋāϞāĻŋāĻ, āĻŦāĻž āϏā§āĻĨāĻžāĻĒāύ, āύāϤā§āύ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ
SDK Cloud Storage āĻāĻŦāĻ Cloud Firestore āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āύāĻŋāϝāĻŧāĻŽā§āϰ āĻāύā§āϝ āĻāĻ āϧāĻžāĻĒāĻā§āϞāĻŋāĻā§ āĻāĻāĻ API āĻāϞ⧠āĻāĻāϤā§āϰāĻŋāϤ āĻāϰāĻžāϰ āĻāĻāĻāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āϝā§āĻŽāύ:
const source = `service cloud.firestore {
match /databases/{database}/documents {
match /carts/{cartID} {
allow create: if request.auth != null && request.auth.uid == request.resource.data.ownerUID;
allow read, update, delete: if request.auth != null && request.auth.uid == resource.data.ownerUID;
}
}
}`;
// Alternatively, load rules from a file
// const fs = require('fs');
// const source = fs.readFileSync('path/to/firestore.rules', 'utf8');
await admin.securityRules().releaseFirestoreRulesetFromSource(source);
āĻāĻ āĻāĻāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύ Cloud Storage āύāĻŋāϝāĻŧāĻŽā§āϰ āĻāύā§āϝ releaseFirestoreRulesetFromSource()
āĻāϰ āϏāĻžāĻĨā§ āĻāĻžāĻ āĻāϰā§āĨ¤
āĻŦāĻŋāĻāϞā§āĻĒāĻāĻžāĻŦā§, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāύ-āĻŽā§āĻŽāϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āύāĻŋāϝāĻŧāĻŽ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āĻāĻŦāĻ āĻāĻ āĻāĻā§āύā§āĻāĻā§āϞāĻŋāϰ āĻāύāĻŋāώā§āĻ āύāĻŋāϝāĻŧāύā§āϤā§āϰāĻŖā§āϰ āĻāύā§āϝ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āϝā§āĻŽāύ:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
Realtime Database āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āĻāĻĒāĻĄā§āĻ āĻāϰā§āύ
Admin SDK āϏāĻžāĻĨā§ Realtime Database āύāĻŋāϝāĻŧāĻŽ āϏā§āĻāĻā§āϞāĻŋ āĻāĻĒāĻĄā§āĻ āĻāϰāϤā§, admin.database
āĻāϰ getRules()
āĻāĻŦāĻ setRules()
āĻĒāĻĻā§āϧāϤāĻŋāĻā§āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ⧎ āĻāĻĒāύāĻŋ JSON āĻŦāĻŋāύā§āϝāĻžāϏā§, āĻŦāĻž āĻŽāύā§āϤāĻŦā§āϝ āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻ āĻšāĻŋāϏāĻžāĻŦā§ āϰā§āϞāϏā§āĻ āĻĒā§āύāϰā§āĻĻā§āϧāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āĻāĻĒāĻĄā§āĻ āĻāϰāϤā§:
const source = `{
"rules": {
"scores": {
".indexOn": "score",
"$uid": {
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
}
}
}`;
await admin.database().setRules(source);
āύāĻŋāϝāĻŧāĻŽāĻžāĻŦāϞ⧠āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύ
āĻŦāĻĄāĻŧ āϰā§āϞāϏā§āĻāĻā§āϞāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻžāϰ āĻāύā§āϝ, Admin SDK āĻāĻĒāύāĻžāĻā§ admin.securityRules().listRulesetMetadata
āĻāϰ āϏāĻžāĻĨā§ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āϏāĻŽāϏā§āϤ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āϤāĻžāϞāĻŋāĻāĻžāĻā§āĻā§āϤ āĻāϰāϤ⧠āĻĻā§āϝāĻŧāĨ¤ āϝā§āĻŽāύ:
const allRulesets = [];
let pageToken = null;
while (true) {
const result = await admin.securityRules().listRulesetMetadata(pageToken: pageToken);
allRulesets.push(...result.rulesets);
pageToken = result.nextPageToken;
if (!pageToken) {
break;
}
}
āϏāĻŽāϝāĻŧā§āϰ āϏāĻžāĻĨā§ 2500 āϰā§āϞāϏā§āĻ āϏā§āĻŽāĻžāϤ⧠āĻĒā§āĻāĻāĻžāύ⧠āĻā§āĻŦ āĻŦāĻĄāĻŧ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻāύā§āϝ, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽāϝāĻŧ āĻāĻā§āϰā§āϰ āĻĒā§āϰāĻžāĻā§āύāϤāĻŽ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āĻŽā§āĻā§ āĻĢā§āϞāĻžāϰ āĻāύā§āϝ āϝā§āĻā§āϤāĻŋ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, 30 āĻĻāĻŋāύā§āϰ āĻŦā§āĻļāĻŋ āϏāĻŽāϝāĻŧ āϧāϰ⧠āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āϏāĻŽāϏā§āϤ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āĻŽā§āĻā§ āĻĢā§āϞāĻžāϰ āĻāύā§āϝ:
const thirtyDays = new Date(Date.now() - THIRTY_DAYS_IN_MILLIS);
const promises = [];
allRulesets.forEach((rs) => {
if (new Date(rs.createTime) < thirtyDays) {
promises.push(admin.securityRules().deleteRuleset(rs.name));
}
});
await Promise.all(promises);
console.log(`Deleted ${promises.length} rulesets.`);
REST API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ
āĻāĻĒāϰ⧠āĻŦāϰā§āĻŖāĻŋāϤ āĻā§āϞāĻā§āϞāĻŋ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻā§āĻā§āĻā§ āĻāĻāĻžāϧāĻŋāĻ Cloud Firestore āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāύā§āϝ Firebase Security Rules āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž āϏāĻš āĻŦāĻŋāĻāĻŋāύā§āύ āĻāϰā§āĻŽāĻĒā§āϰāĻŦāĻžāĻšā§āϰ āĻāύā§āϝ āĻāĻĒāϝā§āĻā§āϤ, āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻŋ āύāĻŋāĻā§āĻ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠Firebase Security Rules āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāĻŦāĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻāĻžāĻāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž API āĻāĻĒāύāĻžāĻā§ āϏāϰā§āĻŦāĻžāϧāĻŋāĻ āύāĻŽāύā§āϝāĻŧāϤāĻž āĻĻā§āϝāĻŧāĨ¤
āĻāĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻ āϏā§āĻŽāĻžāĻā§āϞāĻŋ āύā§āĻ āĻāϰā§āύ:
- āĻā§āϰāĻŽāĻŋāĻ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āĻ āĻŦāĻļā§āϝāĻ UTF-8 āĻāύāĻā§āĻĄ āĻāϰāĻž āĻĒāĻžāĻ ā§āϝā§āϰ 256 KiB-āĻāϰ āĻĨā§āĻā§ āĻā§āĻ āĻšāϤ⧠āĻšāĻŦā§ā§ˇ
- āĻāĻāĻāĻŋ āĻĒā§āϰāĻāϞā§āĻĒā§ āϏāϰā§āĻŦāĻžāϧāĻŋāĻ 2500āĻāĻŋ āύāĻŋāϝāĻŧā§āĻāĻŋāϤ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻŦāĻžāϰ āĻāĻ āϏā§āĻŽāĻž āĻĒā§āĻāĻā§ āĻā§āϞā§, āύāϤā§āύ āϤā§āϰāĻŋ āĻāϰāĻžāϰ āĻāĻā§ āĻāĻĒāύāĻžāĻā§ āĻ āĻŦāĻļā§āϝāĻ āĻāĻŋāĻā§ āĻĒā§āϰāĻžāύ⧠āύāĻŋāϝāĻŧāĻŽ āĻŽā§āĻā§ āĻĢā§āϞāϤ⧠āĻšāĻŦā§ā§ˇ
REST āĻāϰ āϏāĻžāĻĨā§ Cloud Firestore āĻŦāĻž Cloud Storage āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύ āĻāĻŦāĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύ
āĻāĻ āĻŦāĻŋāĻāĻžāĻā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖāĻā§āϞāĻŋ Firestore Rules āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āϝāĻĻāĻŋāĻ āϏā§āĻā§āϞāĻŋ Cloud Storage Rules āĻĒā§āϰāϝā§āĻā§āϝ⧎
āĻāĻĻāĻžāĻšāϰāĻŖāĻā§āϞāĻŋ āĻāĻĒāĻŋāĻāĻ āĻāϞ āĻāϰāϤ⧠āĻāĻžāϰā§āĻāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻĒā§āϰāĻŽāĻžāĻŖā§āĻāϰāĻŖ āĻā§āĻā§āύ āϏā§āĻ āĻāĻĒ āĻāĻŦāĻ āĻĒāĻžāϏ āĻāϰāĻžāϰ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āĻŦāĻžāĻĻ āĻĻā§āĻāϝāĻŧāĻž āĻšāϝāĻŧā§āĻā§ā§ˇ āĻāĻĒāύāĻŋ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻĄāĻā§āĻŽā§āύā§āĻā§āĻļāύā§āϰ āϏāĻžāĻĨā§ āĻāύā§āĻāĻŋāĻā§āϰā§āĻā§āĻĄ API āĻāĻā§āϏāĻĒā§āϞā§āϰāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻ API āύāĻŋāϝāĻŧā§ āĻĒāϰā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ āĻāĻĒāĻŋāĻāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāĻŦāĻ āϏā§āĻĨāĻžāĻĒāύā§āϰ āĻāύā§āϝ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāĻĻāĻā§āώā§āĻĒāĻā§āϞāĻŋ āĻšāϞ:
- āύāĻŋāϝāĻŧāĻŽ āĻĢāĻžāĻāϞ āĻāϤā§āϏ āϤā§āϰāĻŋ āĻāϰā§āύ
- āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύ
- āύāϤā§āύ āϰā§āϞāϏā§āĻ āϰāĻŋāϞāĻŋāĻ (āĻĄāĻŋāĻĒā§āϞāϝāĻŧ) āĻāϰā§āύāĨ¤
āĻāĻāĻāĻŋ āĻā§āϏ āϤā§āϰāĻŋ āĻāϰā§āύ
āϧāϰā§āύ āĻāĻĒāύāĻŋ āĻāĻĒāύāĻžāϰ secure_commerce
Firebase āĻĒā§āϰāĻāϞā§āĻĒā§ āĻāĻžāĻ āĻāϰāĻā§āύ āĻāĻŦāĻ east_store
āύāĻžāĻŽā§āϰ āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϞāĻ-āĻĄāĻžāĻāύ Cloud Firestore Rules āϏā§āĻĨāĻžāĻĒāύ āĻāϰāϤ⧠āĻāĻžāύāĨ¤
āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ firestore.rules
āĻĢāĻžāĻāϞ⧠āĻāĻ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āĻĒā§āϰāϝāĻŧā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύ
āĻāĻāύ, āĻāĻ āĻĢāĻžāĻāϞā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ base64-āĻāύāĻā§āĻĄā§āĻĄ āĻĢāĻŋāĻā§āĻāĻžāϰāĻĒā§āϰāĻŋāύā§āĻ āϤā§āϰāĻŋ āĻāϰā§āύāĨ¤ āϤāĻžāϰāĻĒāϰ āĻāĻĒāύāĻŋ projects.rulesets.create
REST āĻāϞ āĻĻāĻŋāϝāĻŧā§ āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻĒā§āϞā§āĻĄāĻāĻŋ āĻĒā§āϰāĻŖ āĻāϰāϤ⧠āĻāĻ āĻĢāĻžāĻāϞā§āϰ āĻāϤā§āϏāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻāĻžāύā§, REST āĻĒā§āϞā§āĻĄā§ firestore.rules
āĻāϰ āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤ⧠āϏāύā§āύāĻŋāĻŦā§āĻļ āĻāϰāϤ⧠cat
āĻāĻŽāĻžāύā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤
āĻā§āϰā§āϝāĻžāĻāĻŋāĻāϝāĻŧā§āϰ āĻāύā§āϝ, āĻāĻāĻŋāĻā§ āĻāĻĒāύāĻžāϰ east_store
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻžāĻĨā§ āϏāĻāϝā§āĻā§āϤ āĻāϰāϤā§, attachment_point
east_store
āĻ āϏā§āĻ āĻāϰā§āύāĨ¤
curl -X POST -d '{
"source": {
"files": [
{
"content": "' $(cat storage.rules) '",
"name": "firestore.rules",
"fingerprint": <sha fingerprint>
},
"attachment_point": "firestore.googleapis.com/databases/east_store"
]
}
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets'
API āĻāĻāĻāĻŋ āĻŦā§āϧāϤāĻž āĻĒā§āϰāϤāĻŋāĻā§āϰāĻŋāϝāĻŧāĻž āĻāĻŦāĻ āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻā§āϰ āύāĻžāĻŽ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§, āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ projects/secure_commerce/rulesets/uuid123
āĨ¤
āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϰāĻŋāϞāĻŋāĻ (āϏā§āĻĨāĻžāĻĒāύ)
āϝāĻĻāĻŋ āϰā§āϞāϏā§āĻāĻāĻŋ āĻŦā§āϧ āĻšāϝāĻŧ, āĻā§āĻĄāĻŧāĻžāύā§āϤ āĻĒāĻĻāĻā§āώā§āĻĒ āĻšāϞ āĻāĻāĻāĻŋ āύāĻžāĻŽāϝā§āĻā§āϤ āϰāĻŋāϞāĻŋāĻā§ āύāϤā§āύ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻžāĨ¤
curl -X POST -d '{
"name": "projects/secure_commerce/releases/cloud.firestore/east_store" ,
"rulesetName": "projects/secure_commerce/rulesets/uuid123"
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/releases'
āϏāĻā§āϤāύ āĻĨāĻžāĻā§āύ āϝ⧠Firebase Security Rules āĻĒā§āϰāĻāĻžāĻļāĻā§āϞāĻŋ āϏāĻŽā§āĻĒā§āϰā§āĻŖāϰā§āĻĒā§ āĻĒā§āϰāĻāĻžāϰāĻŋāϤ āĻšāϤ⧠āĻāϝāĻŧā§āĻ āĻŽāĻŋāύāĻŋāĻ āϏāĻŽāϝāĻŧ āύā§āϝāĻŧ⧎ āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻāύā§āϝ REST API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āϰā§āϏ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻāĻĄāĻŧāĻžāϤ⧠āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύ āϝā§āĻāĻžāύ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒ āĻ āĻŦāĻŋāϞāĻŽā§āĻŦā§ āϏā§āĻ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰ⧠āϝāĻžāϰ āϏā§āĻĨāĻžāĻĒāύāĻž āĻāĻāύāĻ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻšāϝāĻŧāύāĻŋ⧎
REST āĻāϰ āϏāĻžāĻĨā§ Realtime Database āϰā§āϞāϏā§āĻ āĻāĻĒāĻĄā§āĻ āĻāϰā§āύ
Realtime Database Rules āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻāύā§āϝ āύāĻŋāĻāϏā§āĻŦ REST āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ REST āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ Realtime Database Rules āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻĻā§āĻā§āύāĨ¤
REST āĻāϰ āϏāĻžāĻĨā§ āύāĻŋāϝāĻŧāĻŽāĻžāĻŦāϞ⧠āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύ
āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āĻāĻŦāĻ āϰāĻŋāϞāĻŋāĻ āϤā§āϰāĻŋāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ REST āĻĒāĻĻā§āϧāϤāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ āĻŦā§āĻšā§ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻĨāĻžāĻĒāύāĻž āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻžāϰ āĻāύā§āϝ, āĻŦā§āϝāĻŦāϏā§āĻĨāĻžāĻĒāύāĻž API āύāĻŋāĻŽā§āύāϞāĻŋāĻāĻŋāϤ āĻĒāĻĻā§āϧāϤāĻŋāĻā§āϞāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§:
- āϤāĻžāϞāĻŋāĻāĻž, āĻĒā§āϤā§, āĻāĻŦāĻ āĻŽā§āĻā§ āĻĢā§āϞā§āύ
- āϤāĻžāϞāĻŋāĻāĻž, āĻĒā§āϤā§, āĻāĻŦāĻ āύāĻŋāϝāĻŧāĻŽ āϰāĻŋāϞāĻŋāĻ āĻŽā§āĻā§ āĻĢā§āϞā§āύ
āϏāĻŽāϝāĻŧā§āϰ āϏāĻžāĻĨā§ 2500 āϰā§āϞāϏā§āĻ āϏā§āĻŽāĻžāϤ⧠āĻĒā§āĻāĻāĻžāύ⧠āĻā§āĻŦ āĻŦāĻĄāĻŧ āϏā§āĻĨāĻžāĻĒāύāĻžāϰ āĻāύā§āϝ, āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽāϝāĻŧ āĻāĻā§āϰā§āϰ āĻĒā§āϰāĻžāĻā§āύāϤāĻŽ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āĻŽā§āĻā§ āĻĢā§āϞāĻžāϰ āĻāύā§āϝ āϝā§āĻā§āϤāĻŋ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, 30 āĻĻāĻŋāύā§āϰ āĻŦā§āĻļāĻŋ āϏāĻŽāϝāĻŧ āϧāϰ⧠āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āϏāĻŽāϏā§āϤ āύāĻŋāϝāĻŧāĻŽ āϏā§āĻ āĻŽā§āĻā§ āĻĢā§āϞāĻžāϰ āĻāύā§āϝ, āĻāĻĒāύāĻŋ projects.rulesets.list
āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϤāĻžāĻĻā§āϰ createTime
āĻā§āĻā§āϞāĻŋāϤ⧠Ruleset
āĻ
āĻŦāĻā§āĻā§āĻā§āϰ JSON āϤāĻžāϞāĻŋāĻāĻž āĻĒāĻžāϰā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϤāĻžāϰāĻĒāϰ ruleset_id
āĻĻā§āĻŦāĻžāϰāĻž āϏāĻāĻļā§āϞāĻŋāώā§āĻ āύāĻŋāϝāĻŧāĻŽāϏā§āĻāĻā§āϞāĻŋāϤ⧠project.rulesets.delete
āĻāϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
REST āĻĻāĻŋāϝāĻŧā§ āĻāĻĒāύāĻžāϰ āĻāĻĒāĻĄā§āĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ
āĻ āĻŦāĻļā§āώā§, āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ āĻāĻĒāĻŋāĻāĻ āĻāĻĒāύāĻžāĻā§ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻĒā§āϰā§āĻā§āĻā§āĻā§ Cloud Firestore āĻāĻŦāĻ Cloud Storage āϰāĻŋāϏā§āϰā§āϏ⧠āϏāĻŋāύāĻā§āϝāĻžāĻāĻāĻŋāĻ āĻāĻŦāĻ āϏāĻŋāĻŽā§āύā§āĻāĻŋāĻ āĻĒāϰā§āĻā§āώāĻž āĻāĻžāϞāĻžāύā§āϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧāĨ¤
āĻāĻĒāĻŋāĻāĻ-āĻāϰ āĻāĻ āĻāĻĒāĻžāĻĻāĻžāύāĻāĻŋāϰ āϏāĻžāĻĨā§ āĻā§āϏā§āĻāĻŋāĻ āĻāϰ āĻŽāϧā§āϝ⧠āϰāϝāĻŧā§āĻā§:
-
TestCase
āĻ āĻŦāĻā§āĻā§āĻā§āϰ āĻāĻāĻāĻŋ āϏā§āĻ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāϤā§āĻŦ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋTestSuite
JSON āĻ āĻŦāĻā§āĻā§āĻ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāϰāĻž -
TestSuite
āĻāĻŽāĻž āĻĻā§āĻāϝāĻŧāĻž āĻšāĻā§āĻā§ - āĻĒāĻžāϰā§āϏāĻŋāĻ
TestResult
āĻŦāϏā§āϤ⧠āĻĢā§āϰāϤ
āĻāϏā§āύ testcase.json
āĻĢāĻžāĻāϞ⧠āĻāĻāĻāĻŋ TestCase
āϏāĻš āĻāĻāĻāĻŋ TestSuite
āĻ
āĻŦāĻā§āĻā§āĻ āϏāĻāĻā§āĻāĻžāϝāĻŧāĻŋāϤ āĻāϰāĻŋāĨ¤ āĻāĻ āĻāĻĻāĻžāĻšāϰāĻŖā§, āĻāĻŽāϰāĻž āϏā§āĻ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋāϤ⧠āĻāĻžāϞāĻžāύā§āϰ āĻāύā§āϝ āĻĒāϰā§āĻā§āώāĻžāϰ āϏā§āϝā§āĻā§āϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ REST āĻĒā§āϞā§āĻĄā§āϰ āϏāĻžāĻĨā§ Rules āĻāĻžāώāĻžāϰ āĻā§āϏ āĻāύāϞāĻžāĻāύ⧠āĻĒāĻžāϏ āĻāϰāĻŋāĨ¤ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āύāĻŋāϝāĻŧāĻŽ āĻŽā§āϞā§āϝāĻžāϝāĻŧāύ āĻĒā§āϰāϤā§āϝāĻžāĻļāĻž, āĻāĻŦāĻ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻā§āϰ āĻ
āύā§āϰā§āϧ āĻāϞā§āϞā§āĻ āĻāϰāĻŋ āϝāĻžāϰ āĻŦāĻŋāϰā§āĻĻā§āϧ⧠āϰā§āϞāϏā§āĻ āĻĒāϰā§āĻā§āώāĻž āĻāϰāĻž āĻšāĻŦā§āĨ¤ āĻāĻĒāύāĻŋ āĻĒāϰā§āĻā§āώāĻžāϰ āϰāĻŋāĻĒā§āϰā§āĻāĻāĻŋ āĻāϤāĻāĻž āϏāĻŽā§āĻĒā§āϰā§āĻŖ āϤāĻžāĻ āĻāϞā§āϞā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, "FULL" āĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĢāϞāĻžāĻĢāϞ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰāϤ⧠āϏāĻŽāϏā§āϤ Rules āĻāĻžāώāĻžāϰ āĻ
āĻāĻŋāĻŦā§āϝāĻā§āϤāĻŋ āĻĒā§āϰāϤāĻŋāĻŦā§āĻĻāύ⧠āĻ
āύā§āϤāϰā§āĻā§āĻā§āϤ āĻāϰāĻž āĻāĻāĻŋāϤ, āĻ
āύā§āϰā§āϧā§āϰ āϏāĻžāĻĨā§ āĻŽā§āϞā§āύāĻŋ āĻāĻŽāύ āĻ
āĻāĻŋāĻŦā§āϝāĻā§āϤāĻŋāĻā§āϞāĻŋ āϏāĻšāĨ¤
{ "source": { "files": [ { "name": "firestore.rules", "content": "service cloud.firestore { match /databases/{database}/documents { match /users/{userId}{ allow read: if (request.auth.uid == userId); } function doc(subpath) { return get(/databases/$(database)/documents/$(subpath)).data; } function isAccountOwner(accountId) { return request.auth.uid == accountId || doc(/users/$(request.auth.uid)).accountId == accountId; } match /licenses/{accountId} { allow read: if isAccountOwner(accountId); } } }" } ] }, "testSuite": { "testCases": [ { "expectation": "ALLOW", "request": { "auth": {"uid": "123"}, "path": "/databases/(default)/documents/licenses/abcd", "method": "get"}, "functionMocks": [ { "function": "get", "args": [{"exact_value": "/databases/(default)/documents/users/123"}], "result": {"value": {"data": {"accountId": "abcd"}}} } ] } ] } }
āϤāĻžāϰāĻĒāϰ āĻāĻŽāϰāĻž projects.test
āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻŽā§āϞā§āϝāĻžāϝāĻŧāύā§āϰ āĻāύā§āϝ āĻāĻ TestSuite
āĻāĻŽāĻž āĻĻāĻŋāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤
curl -X POST -d '{
' $(cat testcase.json) '
}' 'https://firebaserules.googleapis.com/v1/projects/secure_commerce/rulesets/uuid123:test'
āĻĢāĻŋāϰ⧠āĻāϏāĻž TestReport
(āĻĒāϰā§āĻā§āώāĻžāϰ āϏāĻžāĻĢāϞā§āϝ/āĻŦā§āϝāϰā§āĻĨāϤāĻžāϰ āϏā§āĻĨāĻŋāϤāĻŋ, āĻĄāĻŋāĻŦāĻžāĻ āĻŦāĻžāϰā§āϤāĻžāĻā§āϞāĻŋāϰ āϤāĻžāϞāĻŋāĻāĻž, āĻĒāϰāĻŋāĻĻāϰā§āĻļāύ āĻāϰāĻž āύāĻŋāϝāĻŧāĻŽā§āϰ āĻ
āĻāĻŋāĻŦā§āϝāĻā§āϤāĻŋāϰ āϤāĻžāϞāĻŋāĻāĻž āĻāĻŦāĻ āϤāĻžāĻĻā§āϰ āĻŽā§āϞā§āϝāĻžāϝāĻŧāύ āϰāĻŋāĻĒā§āϰā§āĻ) āϏā§āĻĨāĻŋāϤāĻŋ āϏāĻžāĻĢāϞā§āϝā§āϰ āϏāĻžāĻĨā§ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāĻŦā§ āϝ⧠āĻ
ā§āϝāĻžāĻā§āϏā§āϏ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻ
āύā§āĻŽā§āĻĻāĻŋāϤāĨ¤
āĻā§āϰāϏ-āϏāĻžāϰā§āĻāĻŋāϏ Cloud Storage Security Rules āĻāύā§āϝ āĻ āύā§āĻŽāϤāĻŋāĻā§āϞāĻŋ āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰā§āύ
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ Cloud Storage Security Rules āϤā§āϰāĻŋ āĻāϰā§āύ āϝāĻž āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋ āĻŽā§āϞā§āϝāĻžāϝāĻŧāύ āĻāϰāϤ⧠Cloud Firestore āύāĻĨāĻŋāϰ āĻŦāĻŋāώāϝāĻŧāĻŦāϏā§āϤ⧠āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāĻā§ āĻĻā§āĻāĻŋ āĻĒāĻŖā§āϝ āϏāĻāϝā§āĻ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āϏāĻā§āώāĻŽ āĻāϰāĻžāϰ āĻāύā§āϝ Firebase āĻāύāϏā§āϞ āĻŦāĻž Firebase CLI-āϤ⧠āĻ āύā§āϰā§āϧ āĻāĻžāύāĻžāύ⧠āĻšāĻŦā§āĨ¤
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ āϧāϰāύā§āϰ āĻā§āϰāϏ-āϏāĻžāϰā§āĻāĻŋāϏ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻ āĻā§āώāĻŽ āĻāϰāĻžāϰ āϏāĻŋāĻĻā§āϧāĻžāύā§āϤ āύā§āύ:
āĻĒā§āϰāĻĨāĻŽāϤ, āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋ āύāĻŋāώā§āĻā§āϰāĻŋāϝāĻŧ āĻāϰāĻžāϰ āĻāĻā§, Cloud Firestore āĻ ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤ⧠Rules āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāύ āϏāĻŽāϏā§āϤ āĻŦāĻŋāĻŦā§āϤāĻŋ āϏāϰāĻŋāϝāĻŧā§ āĻāĻĒāύāĻžāϰ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻāϰā§āύ⧎ āĻ āύā§āϝāĻĨāĻžāϝāĻŧ, āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋ āĻ āĻā§āώāĻŽ āĻāϰāĻžāϰ āĻĒāϰā§, Rules āĻŽā§āϞā§āϝāĻžāϝāĻŧāύā§āϰ āĻĢāϞ⧠āĻāĻĒāύāĻžāϰ āϏāĻā§āĻāϝāĻŧāϏā§āĻĨāĻžāύā§āϰ āĻ āύā§āϰā§āϧāĻā§āϞāĻŋ āĻŦā§āϝāϰā§āĻĨ āĻšāĻŦā§ā§ˇ
āĻā§āĻŽāĻŋāĻāĻž āĻĒā§āϰāϤā§āϝāĻžāĻšāĻžāϰ āĻāϰāĻžāϰ āĻāύā§āϝ āĻā§āϞāĻžāĻāĻĄ āύāĻŋāϰā§āĻĻā§āĻļāĻŋāĻāĻž āĻ āύā§āϏāϰāĻŖ āĻāϰ⧠"Firebase āϰā§āϞāϏ āĻĢāĻžāϝāĻŧāĻžāϰāϏā§āĻā§āϰ āϏāĻžāϰā§āĻāĻŋāϏ āĻāĻā§āύā§āĻ" āĻā§āĻŽāĻŋāĻāĻž āĻŽā§āĻāϤ⧠Google āĻā§āϞāĻžāĻāĻĄ āĻāύāϏā§āϞā§āϰ IAM āĻĒā§āώā§āĻ āĻžāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ⧎
āĻĒāϰā§āϰ āĻŦāĻžāϰ āϝāĻāύ āĻāĻĒāύāĻŋ Firebase CLI āĻŦāĻž Firebase āĻāύāϏā§āϞ āĻĨā§āĻā§ āĻā§āϰāϏ-āϏāĻžāϰā§āĻāĻŋāϏ āύāĻŋāϝāĻŧāĻŽāĻā§āϞāĻŋ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻŦā§āύ āϤāĻāύ āĻāĻĒāύāĻžāĻā§ āĻŦā§āĻļāĻŋāώā§āĻā§āϝāĻāĻŋ āĻĒā§āύāϰāĻžāϝāĻŧ āϏāĻā§āώāĻŽ āĻāϰāĻžāϰ āĻāύā§āϝ āĻ āύā§āϰā§āϧ āĻāϰāĻž āĻšāĻŦā§ā§ˇ