Öncelikle Firebase konusunda daha önce yazdığım yazıları http://angulartr.com/firebase-dersleri/ adresinden incelemenizi öneririm.

Firebase, Güvenlik ve validasyon kurallarını oluşturabilmeniz için size dekleratif bir sözdizimi sunar. Dekleratif ten kasıt, Bu kuralların, uygulamanın kendi logic’ inden ayrı şekilde yazılmasıdır. Bu sebeple ortaya saçma sapan işler ÇIKMAZ 🙂 Verinizi korumak için, client-side ta çalışan uygulamanız ile Firebase arasına bir server koymanıza gerek kalmaz.

“Types of Rules | Kuralların Tipleri”

Kurallar 3 başlık altında toplanıyor. read, write ve validate. İnceleyelim;

.read;

Data okunabilirmi?

.write;

Data yazılabilirmi?

.validate;

Data uygun formattamı?

Aşağıda basit bir kural yazılmıştır

comments tablosundaki kayıtlar okunabilir, yazılabilir lakin yazılırken bakılır; gelen içerik string tipinde mi? ve büyüklüğü 100 karakterden küçük mü ? aksi taktirde yazılmaz.

“Predefined Variables | Halihazırda tanımlı değerler”

Kurallarınızda kullanmak üzere, Firebase’ de pek çok yardımcı halihazırda tanımlanmış değer gelmektedir. Bunların hepsini örneklerimizde kullanacağız. Şimdi bu değerleri inceleyelim;

  • now; milisecond olarak Firebase serverlarındaki anlık zamanı verir.
  • root; adından da anlaşılacağı üzere, veritabanınızın kök dizinine referans verir. Ne işe yarar diyebilirsiniz? Bunu anlamanız için child referansını da bilmeniz gerekiyor ki ilerleyen konularda işleyeceğiz ama şöyle düşünün; user adında bir tablonuz var, bu tablonun user adında bir alanı var. Yani alan, ait olduğu tablo ile aynı isimde. Erişim yaparken sıkıntı çekebilinecek durumlar oluşabilirmi? EVET. İşte erişimin başına root eklediğimizde, root.child(‘user’) dediğimizde, direk olarak user tablosuna referans oluşturuyoruz. Halen anlamadıysanız problem değil. Zaten örneklerde çok çok iyi anlayacaksınız.
  • newData; Kayıt edilmek üzere gönderilmiş ve henüz yeni kayıt edilmiş datayı temsil eder.
    (Burda çok çok enteresan önemli bir durum var. TİKKKKAT, newData değerinin, validasyon kurallarında kullanıldığını ve validasyonun olumsuz olması durumunda, kayıt yapılmadığını göreceksiniz. EE diyeceksiniz ki; newData değerini validasyonda kullanıyorum ookey, validasyon patlarsa kaydetmiyor ama sen bana newData’ nın yeni kayıt edilmiş değeri temsil ettiğini söylüyorsun. YENİ KAYIT EDİLMİŞ DATA’ dan bahsediyorsun, ama validasyon başarı ile sonuçlanmazsa kayıt olmuyorkeeeee!
    BİNGO!!!
    Firebase bir enteresan çalışıyor arkadaşlar. Önce gönderdiğiniz datayı kayıt ediyor. Ardından validasyon yapıyor. Validasyon patlarsa, rollback yapıyor. rollback konusunda bilgisi olmayan kankiler https://en.wikipedia.org/wiki/Rollback_(data_management) veritabanı teknolojilerinde nedir bir baksınlar. Çok özetle, yapılan tüm değişiklikleri geri almaktır.
    Yani, validasyon patlarsa, o kayıt siliniyor. Bunu biliniz. Ayrıca eğerki update işlemi yapıyorsak, newData, var olan data ile merge edilmiş halidir.
    )
  • data; Halihazırda kayıtlı olan datayı temsil eder. Yani daha önceden kayıt edilmiş. Validasyonları hep geçmiş.
  • $variables; $ işareti ile başlarlar. Örneğin $user gibi. Örnekleyeceğiz.
  • auth; güvenlik kurallarında çok kullanacaksınız. Login olmuş kullanıcının bilgilerini verir.

NOT Null | Doldurulması Zorunlu Alan Kontrolü

Kayıt girerken, bazı alanların doldurulmasını zorunlu tutabilirsiniz. Örneğin email adresi ve şifresini girmemiş bir kullanıcıyı kayıt etmeyebilirsiniz.Örnek;

Users tablosuna gelen kayıtta email yada password boş ise, kayıt gerçekleşemeyecektir.

Using $Variables | Değişkenleri Kullanma

Belirli alanların doldurulması zorunlu iken, belirli alanları ise hiç kaydetmek istemeyebilirsiniz. Örneğin users tablosu için, her ne kadar client-side da email ve password haricinde bir alan gönderilmemesi için engelleme yapsanızda, kullanıcılar bir şekilde bu engellemeye kıracaklar ve veri göndereceklerdir. İşte bu durumda, email ve password harici alanları toplu olarak nasıl seçeceksiniz ? Tabiki $variables ın $other değişkeni ile. Örnek;

Bu kurala göre, email ve password gelen data da mutlaka dolu olmalı. Lakin bu alanlar dışında hiçbir alan bulunmamalı.

“Validating Data | Veri Validasyonu”

Gelen veriyi kaydetmeden önce formatını valide etmek isteyebilirsiniz. Örneğin tarih gibi;

Bu kural ile sadece 1900-2099 yılları arasında ve YYYY-MM-DD formatındaki tarihler kayıt edilecektir.

Validasyon kuralları, verilerinizi silerken devreye girmemektedir. Çünkü veriyi silmek zaten verinin değerini null yapmak olacağından, null bir değer için validasyon yapılamaz.

Validate yerine asla write kuralı kullanılmamalı!!!! Sebebini ilerleyen konularda anlatacağım.

 

Leave A Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir