Firebase CLI kullanın
Firebase CLI'yı kullanarak Kuralları düzenleyin ve dağıtın. CLI'yi kullanmak, kurallarınızı uygulama kodunuzla sürüm kontrolü altında tutmanıza ve mevcut dağıtım sürecinizin bir parçası olarak kuralları dağıtmanıza olanak tanır.
Bir konfigürasyon dosyası oluşturun
Firebase projenizi Firebase CLI kullanarak yapılandırdığınızda, proje dizininizde bir .rules
yapılandırma dosyası oluşturursunuz. Firebase projenizi yapılandırmaya başlamak için aşağıdaki komutu kullanın:
Cloud Firestore
// Set up Firestore in your project directory, creates a .rules file firebase init firestore
Gerçek Zamanlı Veritabanı
// Set up Realtime Database in your project directory, creates a .rules file firebase init database
Depolama
// Set up Storage in your project directory, creates a .rules file firebase init storage
Kurallarınızı düzenleyin ve güncelleyin
Kurallarınızı doğrudan .rules
yapılandırma dosyasında düzenleyin. Firebase CLI'da yaptığınız tüm düzenlemelerin Firebase konsoluna yansıtıldığından veya Firebase konsolunu ya da Firebase CLI'yı kullanarak sürekli olarak güncelleme yaptığınızdan emin olun. Aksi takdirde, Firebase konsolunda yapılan güncellemelerin üzerine yazabilirsiniz.
Güncellemelerinizi test edin
Güncellemelerinizi yerel olarak test etmek ve uygulamanızın Kurallarının istediğiniz davranışı sergilediğini onaylamak için Firebase emülatörünü kullanın.
Güncellemelerinizi dağıtın
Kurallarınızı güncelledikten ve test ettikten sonra, bunları üretime dağıtın. Kurallarınızı tek başına seçerek dağıtmak veya normal dağıtım sürecinizin bir parçası olarak dağıtmak için aşağıdaki komutları kullanın.
Cloud Firestore
// Deploy your .rules file firebase deploy --only firestore:rules
Gerçek Zamanlı Veritabanı
// Deploy your .rules file firebase deploy --only database
Depolama
// Deploy your .rules file firebase deploy --only storage
Firebase konsolunu kullanın
Kuralları Firebase konsolundan da düzenleyebilir ve dağıtabilirsiniz.
Kurallarınızı düzenleyin ve güncelleyin
- Firebase konsolunu açın ve projenizi seçin.
- Ardından, Kurallar editörü gitmek için Kurallar 'ı, ürün gezinmesinde Gerçek Zamanlı Veritabanı, Bulut FireStore veya Depolama seçin.
- Kurallarınızı doğrudan düzenleyicide düzenleyin.
Güncellemelerinizi test edin
Kural davranışınızı Kural simülatörünü kullanarak doğrudan Firebase konsolunda test edebilirsiniz. Simülatör ekranını Kural düzenleyicide açın, ayarları değiştirin ve Çalıştır'a tıklayın. Düzenleyicinin üst kısmındaki onay mesajına bakın.
Güncellemelerinizi dağıtın
Güncellemelerinizin beklediğiniz gibi olduğundan emin olduğunuzda Yayınla'yı tıklayın.
Admin SDK'yı kullanın
Güvenlik kurallarını programlı bir şekilde oluşturmak, yönetmek ve dağıtmak için Node.js için Yönetici SDK'sını kullanabilirsiniz. Bu programlı erişimle şunları yapabilirsiniz:
- Kuralları yönetmek için özel araçlar, komut dosyaları, kontrol panelleri ve CI / CD ardışık düzenleri uygulayın.
- Birden çok Firebase projesinde kuralları daha kolay yönetin.
Kuralları programlı olarak güncellerken, uygulamanızın erişim kontrolünde istenmeyen değişiklikler yapmaktan kaçınmak çok önemlidir. Yönetici SDK kodunuzu, özellikle kuralları güncellerken veya dağıtırken güvenliği en başta göz önünde bulundurarak yazın.
Unutulmaması gereken bir diğer önemli nokta, Firebase güvenlik kurallarının tam olarak dağıtılmasının birkaç dakika sürmesidir. Kuralları dağıtmak için Admin SDK'yı kullanırken, uygulamanızın dağıtımı henüz tamamlanmayan kurallara hemen dayandığı yarış koşullarından kaçındığınızdan emin olun. Kullanım durumunuz kontrol kurallarına erişim için sık güncelleme gerektiriyorsa, sık güncellemelere rağmen yarış koşullarını azaltmak için tasarlanmış Cloud Firestore kullanan çözümleri düşünün.
Ayrıca şu sınırlara dikkat edin:
- Kurallar, serileştirildiğinde 64 KiB UTF-8 kodlu metinden küçük olmalıdır.
- Bir proje toplamda en fazla 2500 dağıtılmış kural kümesine sahip olabilir. Bu sınıra ulaşıldığında, yenilerini oluşturmadan önce bazı eski kural kümelerini silmeniz gerekir.
Storage veya Cloud Firestore kural kümeleri oluşturun ve dağıtın
Yönetici SDK ile güvenlik kurallarını yönetmek için tipik bir iş akışı, üç ayrı adım içerebilir:
- Kural dosyası oluşturun (isteğe bağlı)
- Kural seti oluşturun
- Yeni kural kümesini yayınlayın veya dağıtın
SDK, bu adımları Storage ve Cloud Firestore güvenlik kuralları için tek bir API çağrısında birleştirmek için bir yöntem sağlar. Örneğin:
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);
Aynı model, releaseFirestoreRulesetFromSource()
ile Depolama kuralları için de çalışır.
Alternatif olarak, kural dosyasını bellek içi nesne olarak oluşturabilir, kural kümesini oluşturabilir ve bu olayların daha yakından kontrolü için kural kümesini ayrı olarak dağıtabilirsiniz. Örneğin:
const rf = admin.securityRules().createRulesFileFromSource('firestore.rules', source);
const rs = await admin.securityRules().createRuleset(rf);
await admin.securityRules().releaseFirestoreRuleset(rs);
Gerçek Zamanlı Veritabanı kural kümelerini güncelleme
Gerçek Zamanlı Veritabanı kural getRules()
Admin SDK ile güncellemek için getRules()
ve setRules()
yöntemlerini admin.database
. Kural kümelerini JSON biçiminde veya yorumların dahil olduğu bir dize olarak alabilirsiniz.
Bir kural setini güncellemek için:
const source = `{
"rules": {
"scores": {
".indexOn": "score"
"$uid": {
".read": "$uid == auth.uid",
".write": "$uid == auth.uid"
}
}
}
}`;
await admin.database().setRules(source);
Kural kümelerini yönetin
Büyük kural admin.securityRules().listRulesetMetadata
yönetmeye yardımcı olmak için Admin SDK, mevcut tüm kuralları admin.securityRules().listRulesetMetadata
. Örneğin:
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;
}
}
Zaman içinde 2500 kural sınırına ulaşan çok büyük kural kümeleri için, sabit bir zaman döngüsündeki en eski kuralları silmek için mantık oluşturabilirsiniz. Örneğin, 30 günden daha uzun süredir kullanılan TÜM kural kümelerini silmek için:
const thirtyDays = new Date(Date.now() - THIRTY_DAYS_IN_MILLIS);
const promises = [];
allRulesets.forEach((rs) => {
if (new Date(rs.crateTime) < thirtyDays) {
promises.push(admin.securityRules().deleteRuleset(rs.name));
}
});
await Promise.all(promises);
console.log(`Deleted ${promises.length} rulesets.`);