2016-04-01 40 views
0

benim Firebase aşağıdaki veri yapısı vardır:Firebase güvenlik kuralları

{ 
    "groups" : { 
     "-KEFQ7rTQscPX4hqn6ec" : { 
      "createdBy" : "b5cd3a86-108e-4ef3-9ab8-8a1e4da7491c", 
      "description" : "Test", 
      "isPublic" : true, 
      "title" : "T1" 
     }, 
     "-KEFQao_Wd-Y-nLzIx2e" : { 
      "createdBy" : "b5cd3a86-108e-4ef3-9ab8-8a1e4da7491c", 
      "description" : "B", 
      "isPublic" : false, 
      "title" : "E" 
     } 
} 

ve aşağıdaki ulaşmak için çalışıyorum:

  1. Herkes isPublic" sahip tüm grupların okuyabilir "gerçek ==
  2. Sadece oluşturdukları gruplar görebilirsiniz kullanıcılar giriş

İlk yaklaşımdır:

{ 
    "rules": { 
    "groups": { 
     ".read": true, 
     "$id": { 
     ".read": "data.child('isPublic').val() === true" 
     } 
     } 
    } 
} 

This stackoverflow post çalışmıyor açıklıyor, ama ben bunu çalışmasını sağlayacak çözemedim.

Düzenleme 1:

This post kamu/özel sorun için bir çözüm (benim 1. soru) ancak ikinci soru için vardır.

Düzenleme 2: Kamu/özel sorun için çalışma çözümü için @VonD için

teşekkürler.

Bu çözümle, kamu/özel ile ilgili sorun çözülür. Özel bir grubun çok sayıda üyesi olduğunu ve bunların kullanıcı kimliklerini başka bir dizide "üyeler" içinde saklayacağını düşünürsek - yalnızca üye olduğum sürece gruba erişime nasıl izin veririm?

"privateGroups": { 
     "b5cd3a86-108e-4ef3-9ab8-8a1e4da7491c": { 
      "-KEFQao_Wd-Y-nLzIx2e" : { 
       "createdBy" : "b5cd3a86-108e-4ef3-9ab8-8a1e4da7491c", 
       "description" : "B", 
       "title" : "E", 
       "members": [userId1, userId2, userId3...] 
      } 
     } 
    } 

cevap

3

gerekli güvenlik kuralları Belgeniz yapısı ile hayata olamaz Sayısı: Belirli bir kullanıcının belirli bir düğümün bazı çocuk belgelerini okuyabilir ifade etmek istiyorum, kullanıcının yalnızca erişmek mümkün olacak Onları tam yollarıyla, örneğin "gruplar/-KEFQao_Wd-Y-nLzIx2e", ama verilen ölçütlere uyan grupların listesini alamaz (tabii ki farklı bir yoldan grupların bir listesini tutmazsanız) Kullanıcı erişebilir, yani her kullanıcı için tüm genel grup kimliklerini çoğaltabilirsiniz). Daha iyi bir uyum Firebase güvenlik kuralları olurdu olurdu

bir belge yapısı:

{ 
    "publicGroups": { 
     "-KEFQ7rTQscPX4hqn6ec" : { 
      "createdBy" : "b5cd3a86-108e-4ef3-9ab8-8a1e4da7491c", 
      "description" : "Test", 
      "title" : "T1" 
     } 
    }, 
    "privateGroups": { 
     "b5cd3a86-108e-4ef3-9ab8-8a1e4da7491c": { 
      "-KEFQao_Wd-Y-nLzIx2e" : { 
       "createdBy" : "b5cd3a86-108e-4ef3-9ab8-8a1e4da7491c", 
       "description" : "B", 
       "title" : "E" 
      } 
     } 
    } 
} 

Güvenlik kuralları sonra uygulanması kolay olacaktır:

{ 
    "publicGroups": { 
     ".read": true 
    }, 
    "privateGroups": { 
     "$userId": { 
      ".read": "auth.uid === $userId" 
     } 
    } 
} 

yardımcı olur Umut.

+0

Gerçekten işe yarıyor! Teşekkür ederim! :) –