2017-10-23 96 views
5

Koleksiyonum var. Her belge, belgelere erişebilecek kişilerin kullanıcı kimliğini saklayacak bir nesne okuyucusuna sahiptir. Ben açısal FirebaseFirestore kuralları eşlemesi

constructor(private afAuth: AngularFireAuth, private afs: AngularFirestore) { 
    this.afAuth.authState.subscribe(auth => { 
     this.users = afs.collection<User>('users', ref => ref.where('readers.' + auth.uid, '==', true)).valueChanges(); 
    }); 
    } 

Ben kullanıcı kural tüm okuma izin verirseniz, benim sayfa gösterecektir doğru girdileri

kullanıyorum enter image description here

bir belgeye erişebilirsiniz bir veya birçok kullanıcı olabilir

match /users/{userId=**} { 
     allow read, write; 
    } 

UID kullanarak filtrelenecek kuralı eklediğimde, eksik veya yetersiz izinler alıyorum.

match /users/{userId=**} { 
     allow read, write: if resource.data.readers[request.auth.uid] == true || 
         resource.readers[request.auth.uid] == true; 
    } 

Kurallar için neyi yanlış yaptığım konusunda herhangi bir yardım için teşekkür ederiz. Şimdiden teşekkürler.

+0

i 'a .' içine koymak resource.data.readers eğer gerek fikir vermelidir. [Istek .auth.uid] == true 'like this – Hareesh

+0

Bu bir sözdizimi hatası olur. – William

+0

Tamam, dokümanlar içinde değeri almak için '$ (request.auth.uid)' kullandılar. resource.data.readers [$ (request.auth.uid)] == true 'yerine – Hareesh

cevap

0

Kurallarınızı veritabanı kurallarına göre değiştirmeyi denediniz mi?

{ 
    "rules": { 
    ".read": "auth == null", 
    ".write": "auth == null" 
    } 
} 
+0

Koleksiyon olarak çalışmaz, her belgenin farklı kullanıcılar tarafından erişileceği birden fazla belgeye sahip olacak. – William

0
//Object structure 
"documentToShare"{ 
documentData: {}, 
documentUsers:{user1UID,user2UID} 
} 

//Firebase rules 
Rules:{ 
"documentToshare: { 

match documentToshare/documentUsers/&uid 
} 
} 

geçerli değildir muhtemelen hızlı örnek olduğunu ve ancak bu size