2017-10-10 45 views
7

Şu anda bir değerlendirme olarak firebase üzerinde küçük bir uygulama oluşturmaya çalışıyorum. İlginç ve süper verimli görünüyor, ancak firestore kuralları ile ilgili bir sorunum var.Firestore öz koşuluyla kuralları okuyun

{ 
    "name":String, 
    "description":String, 
    "owners": 
    { 
     "uid": String 
     "uid2": String 
    } 
} 

ve kurallar böyle ayarlayın::

service cloud.firestore { 
    match /databases/{database}/documents { 
     match /games { 
      match /{game} { 
       allow write: if request.auth != null && request.resource.data.owners[request.auth.uid] == 'ADMIN'; 
       allow update: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN'; 
       allow read: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN'; 
      } 
     } 
    } 
} 

iken yazma, güncelleme çalışmaları cezası

Böyle seyir nesnelerle bir koleksiyona (oyunlar) sahiptir. Salt okunur tek belgeler için çalışır. Bir koleksiyonu okumayı denediğimde, kullanıcının hakkı yoktu sanki erişim hatası alıyorum. işe yapar parçası ya da yardımcı olmuyor bir where("owners."+auth.uid,"==", 'ADMIN') koleksiyonuna sorgu ekleme

resource.data.owners[request.auth.uid] == 'ADMIN'. 

olduğunu.

yanlış burada ne yapıyorum? Benzer senaryo için firebase firestore'da önerilen bir yaklaşım var mı? DÜZENLEME

: böyle 'get' ve 'liste' kurallar ekleyerek çalıştı: beklendiği gibi

allow list: if request.auth != null;

allow get: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';

O çalışmadı. Ben where ile belgeleri listelemek için izin vermeyi bekledim ama get yapamadım bir belge varsa "Eksik veya yetersiz izinler" almak bekleniyor. Yapabildiğim, TÜM belgeleri listelemek, ancak bazılarını doğrudan okumamıştır (get kuralı, tek bir belgeyi almaya çalışırken, ancak bunları bir koleksiyondan listelerken değil).

DÜZENLEME 2: @MikeMcDonald'a göre beklentim doğruydu, ancak şu anda tetikleniyor. Düzeltmeyi bekliyorum.

DÜZENLEME 3: Şimdi bu şekilde ayarlamak üzere kural ve listesi ile iyi çalışıyor:

allow get, list: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';

+1

'Write'' update'ın bir üst kümesi olduğunu unutmayın, bu nedenle şu anda 'write' kuralınız' update'in üzerine yazılır. Bunu "create" olarak değiştirin ve hedeflediğiniz hedefe biraz daha yakın olacaksınız. –

+0

@MikeMcDonald teşekkürler, yapacağım. Ayrıca (okuduğumdan biraz daha fazla okuduktan sonra) iki "okur" olduğunu da gördüm. '' '' '' '' '' '' '' '' daha sonra listeye daha geniş bir listeye girmeye çalışacağım. Teşekkürler! – Monku

+1

'read'' get' ve 'list' içeren şemsiyedir. Yukarıdakilerin bir hata olduğunu doğruladım - işe yarayacak, ancak dizi elemanlarını burada düzgün bir şekilde ele almıyoruz. Düzeltme bittiğinde buradan takip edeceğim. –

cevap

0

Ben oluşturmak düşünmek ve onlar yazma parçasıdır ve koşul 1 gelebilmektedir çünkü güncelleme çalışır.