Mevcut verilere dayalı olarak yeni veriler yazmak için Firebase Security Rules kullanabilirsiniz inceleyebilirsiniz. Ayrıca, Google Etiket Yöneticisi'ni kullanarak Böylece, yazılan yeni verilere göre yazma işlemlerini kısıtlayarak doğrulamalar yapabilirsiniz. Okumaya devam edin inceleyin.
Veri doğrulama kuralları hakkında daha fazla bilgi edinmek için her bölümden bir ürün seçin.
Yeni verilerle ilgili kısıtlamalar
Cloud Firestore
Belirli bir alan içeren bir dokümanın belirli bir
oluşturulmuşsa alanı allow
koşuluna ekleyebilirsiniz. Örneğin,
ranking
alanını içeren dokümanların oluşturulmasını reddetmek istiyorsanız,
create
koşulunda izin verilmez.
service cloud.firestore {
match /databases/{database}/documents {
// Disallow
match /cities/{city} {
allow create: if !("ranking" in request.resource.data)
}
}
}
Realtime Database
Belirli değerleri içeren verilerin eklenmediğinden emin olmak istiyorsanız
eklemek istiyorsanız, bu değeri kurallarınıza ekler ve
yazar. Örneğin, ranking
içeren yazmaları reddetmek isterseniz
değerleri söz konusu olduğunda, ranking
değerlerine sahip dokümanlar için yazma işlemlerine izin verilmez.
{
"rules": {
// Write is allowed for all paths
".write": true,
// Allows writes only if new data doesn't include a `ranking` child value
".validate": "!newData.hasChild('ranking')
}
}
Cloud Storage
Belirli meta verileri içeren bir dosyanın dosyamda yer almaması
meta verileri allow
koşuluna ekleyebilirsiniz. Örneğin,
ranking
meta verisi içeren dosyaların oluşturulmasını reddetmek istiyorsunuz.
create
koşulunda izin verilmez.
service firebase.storage {
match /b/{bucket}/o {
match /files/{allFiles=**} {
// Disallow
allow create: if !("ranking" in request.resource.metadata)
}
}
}
Firebase Security Rules uygulamasındaki mevcut verileri kullan
Cloud Firestore
Birçok uygulama, erişim denetimi bilgilerini veritabanındaki dokümanlarda alanlar olarak depolar. Cloud Firestore Security Rules dokümana göre erişime dinamik olarak izin verebilir veya erişimi reddedebilir veri:
service cloud.firestore {
match /databases/{database}/documents {
// Allow the user to read data if the document has the 'visibility'
// field set to 'public'
match /cities/{city} {
allow read: if resource.data.visibility == 'public';
}
}
}
resource
değişkeni istenen dokümana işaret eder ve resource.data
değişkeni
belgede depolanan tüm alanların ve değerlerin bir haritası. Daha fazla
resource
değişkeni hakkında daha fazla bilgi için referansa
dokümanlarına göz atın.
Veri yazarken gelen verileri mevcut verilerle karşılaştırmak isteyebilirsiniz. Bu
bir alanın değişmediğinden veya yalnızca
veya yeni değerin en az bir hafta sonrası olduğunu belirten bir değer girilmelidir.
Bu durumda, kural kümeniz bekleyen yazmaya izin veriyorsa request.resource
değişkeni dokümanın gelecekteki durumunu içerir. Yalnızca şu özelliklere sahip update
işlemleri için:
bir alt kümeyi değiştirmek istediğinizde request.resource
değişkeni
işlemden sonraki beklemedeki doküman durumunu içermelidir. Alanı kontrol edebilirsiniz.
değerleri request.resource
içinde ayarlayarak istenmeyen veya tutarsız veri güncellemelerini önleyin:
service cloud.firestore {
match /databases/{database}/documents {
// Make sure all cities have a positive population and
// the name is not changed
match /cities/{city} {
allow update: if request.resource.data.population > 0
&& request.resource.data.name == resource.data.name;
}
}
}
Realtime Database
Realtime Database ürününde, veri yapılarını uygulamak ve doğrulamak için .validate
kurallarını kullanın
veriler yer alır. Rules, şundan sonra .validate
kural çalıştırdı:
bir .write
kuralının erişim izni verdiğini doğrulayarak
.validate
kuralları basamaklamaz. Herhangi bir doğrulama kuralının
yolunu veya alt yolunu içeriyorsa yazma işleminin tamamı reddedilir.
Ayrıca, doğrulama tanımları yalnızca null olmayan değerleri kontrol eder ve
ve ardından verileri silen istekleri yoksayar.
Aşağıdaki .validate
kurallarını göz önünde bulundurun:
{
"rules": {
// write is allowed for all paths
".write": true,
"widget": {
// a valid widget must have attributes "color" and "size"
// allows deleting widgets (since .validate is not applied to delete rules)
".validate": "newData.hasChildren(['color', 'size'])",
"size": {
// the value of "size" must be a number between 0 and 99
".validate": "newData.isNumber() &&
newData.val() >= 0 &&
newData.val() <= 99"
},
"color": {
// the value of "color" must exist as a key in our mythical
// /valid_colors/ index
".validate": "root.child('valid_colors/' + newData.val()).exists()"
}
}
}
}
Yukarıdaki kurallara sahip bir veritabanına yazma istekleri aşağıdaki gibi olur: sonuç:
JavaScript
var ref = db.ref("/widget"); // PERMISSION_DENIED: does not have children color and size ref.set('foo'); // PERMISSION DENIED: does not have child color ref.set({size: 22}); // PERMISSION_DENIED: size is not a number ref.set({ size: 'foo', color: 'red' }); // SUCCESS (assuming 'blue' appears in our colors list) ref.set({ size: 21, color: 'blue'}); // If the record already exists and has a color, this will // succeed, otherwise it will fail since newData.hasChildren(['color', 'size']) // will fail to validate ref.child('size').set(99);
Objective-C
FIRDatabaseReference *ref = [[[FIRDatabase database] reference] child: @"widget"]; // PERMISSION_DENIED: does not have children color and size [ref setValue: @"foo"]; // PERMISSION DENIED: does not have child color [ref setValue: @{ @"size": @"foo" }]; // PERMISSION_DENIED: size is not a number [ref setValue: @{ @"size": @"foo", @"color": @"red" }]; // SUCCESS (assuming 'blue' appears in our colors list) [ref setValue: @{ @"size": @21, @"color": @"blue" }]; // If the record already exists and has a color, this will // succeed, otherwise it will fail since newData.hasChildren(['color', 'size']) // will fail to validate [[ref child:@"size"] setValue: @99];
Swift
var ref = FIRDatabase.database().reference().child("widget") // PERMISSION_DENIED: does not have children color and size ref.setValue("foo") // PERMISSION DENIED: does not have child color ref.setValue(["size": "foo"]) // PERMISSION_DENIED: size is not a number ref.setValue(["size": "foo", "color": "red"]) // SUCCESS (assuming 'blue' appears in our colors list) ref.setValue(["size": 21, "color": "blue"]) // If the record already exists and has a color, this will // succeed, otherwise it will fail since newData.hasChildren(['color', 'size']) // will fail to validate ref.child("size").setValue(99);
Java
FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference ref = database.getReference("widget"); // PERMISSION_DENIED: does not have children color and size ref.setValue("foo"); // PERMISSION DENIED: does not have child color ref.child("size").setValue(22); // PERMISSION_DENIED: size is not a number Map<String,Object> map = new HashMap<String, Object>(); map.put("size","foo"); map.put("color","red"); ref.setValue(map); // SUCCESS (assuming 'blue' appears in our colors list) map = new HashMap<String, Object>(); map.put("size", 21); map.put("color","blue"); ref.setValue(map); // If the record already exists and has a color, this will // succeed, otherwise it will fail since newData.hasChildren(['color', 'size']) // will fail to validate ref.child("size").setValue(99);
REST
# PERMISSION_DENIED: does not have children color and size curl -X PUT -d 'foo' \ https://docs-examples.firebaseio.com/rest/securing-data/example.json # PERMISSION DENIED: does not have child color curl -X PUT -d '{"size": 22}' \ https://docs-examples.firebaseio.com/rest/securing-data/example.json # PERMISSION_DENIED: size is not a number curl -X PUT -d '{"size": "foo", "color": "red"}' \ https://docs-examples.firebaseio.com/rest/securing-data/example.json # SUCCESS (assuming 'blue' appears in our colors list) curl -X PUT -d '{"size": 21, "color": "blue"}' \ https://docs-examples.firebaseio.com/rest/securing-data/example.json # If the record already exists and has a color, this will # succeed, otherwise it will fail since newData.hasChildren(['color', 'size']) # will fail to validate curl -X PUT -d '99' \ https://docs-examples.firebaseio.com/rest/securing-data/example/size.json
Cloud Storage
Kuralları değerlendirirken dosyanın meta verilerini de değerlendirmek isteyebilirsiniz. yükleme, indirme, değiştirme veya silme işlemlerini yapabilir. Bu sayede kendi başınıza belirli dosyalara izin vermek gibi işlemler için karmaşık ve güçlü veya yalnızca yüklenecek belirli bir boyutun üzerindeki dosyalar silindi.
resource
nesnesi,
Cloud Storage nesne algılandı. Bu özellikler read
veya
Veri bütünlüğünü sağlamak için write
istekleri. resource
nesnesi, meta verileri kontrol eder
(Cloud Storage paketinizdeki mevcut dosyalarda)
service firebase.storage {
match /b/{bucket}/o {
match /images {
match /{allImages=**} {
// Allow reads if a custom 'visibility' field is set to 'public'
allow read: if resource.metadata.visibility == 'public';
}
}
}
}
request.resource
nesnesini write
isteklerinde de kullanabilirsiniz (örneğin,
meta veri güncellemeleri
ve silme işlemleri gibi. request.resource
nesnesi,
write
öğesine izin verilirse yazılacak dosyadaki meta verileri içerir.
İstenmeyen veya tutarsız güncellemeleri önlemek için bu iki değeri kullanabilirsiniz. veya dosya türü ya da boyutu gibi uygulama kısıtlamalarını zorunlu kılabilirsiniz.
service firebase.storage {
match /b/{bucket}/o {
match /images {
// Cascade read to any image type at any path
match /{allImages=**} {
allow read;
}
// Allow write files to the path "images/*", subject to the constraints:
// 1) File is less than 5MB
// 2) Content type is an image
// 3) Uploaded content type matches existing content type
// 4) File name (stored in imageId wildcard variable) is less than 32 characters
match /{imageId} {
allow write: if request.resource.size < 5 * 1024 * 1024
&& request.resource.contentType.matches('image/.*')
&& request.resource.contentType == resource.contentType
&& imageId.size() < 32
}
}
}
}
resource
nesnesindeki özelliklerin tam listesi :
referans belgeleri.