Data validation rules in Firebase - Commands & Configuration
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // Match all documents in the 'users' collection match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; allow create: if request.resource.data.keys().hasAll(['name', 'age']) && request.resource.data.name is string && request.resource.data.name.size() > 0 && request.resource.data.age is int && request.resource.data.age >= 13 && request.resource.data.age <= 120; allow update: if request.resource.data.keys().hasOnly(['name', 'age']) && request.resource.data.name is string && request.resource.data.name.size() > 0 && request.resource.data.age is int && request.resource.data.age >= 13 && request.resource.data.age <= 120; allow delete: if false; // prevent deleting user documents } } }
This file sets rules for the Firestore database.
rules_version: Specifies the version of rules syntax.
service cloud.firestore: Applies rules to Firestore.
match /databases/{database}/documents: Applies rules to all documents.
match /users/{userId}: Targets documents in the 'users' collection.
allow read, write: Allows only authenticated users to read/write their own data.
allow create: Checks that new data has 'name' and 'age' fields, with 'name' as a non-empty string and 'age' as an integer between 13 and 120.
allow update: Allows updates only if the data has only 'name' and 'age' fields with the same checks.
allow delete: Prevents deleting user documents.
firebase deploy --only firestore:rules
--only firestore:rules - Deploys only Firestore rules without affecting other Firebase services.firebase emulators:start --only firestore
--only firestore - Starts only the Firestore emulator.firebase firestore:rules:test --rules firestore.rules --test-file test.json
If you remember nothing else from this pattern, remember: data validation rules check data before saving to keep your database safe and clean.