2017-10-23 7 views
5

컬렉션이 있습니다. 각 문서에는 문서에 액세스 할 수있는 사용자의 uid를 저장할 객체 판독기가 있습니다. 내가 각도 중포 기지Firestore 규칙 객체 맵

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(); 
    }); 
    } 

I 사용자 규칙이 모든 읽기를 허용하는 경우, 내 페이지가 표시됩니다 올바른 항목

을 사용하고 enter image description here

문서에 액세스 할 수있는 하나 또는 여러 사용자 수

uid를 사용하여 필터링하는 규칙을 추가하면 누락 또는 불충분 한 사용 권한 오류가 발생합니다.

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

내가 규칙을 잘못했는지 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

내가 당신의''.' 내부를 넣어 resource.data.readers 경우 필요가 있다고 생각 아이디어를 제공해야합니다. [요청 .auth.uid] == true' this like – Hareesh

+0

구문 오류가 있습니다. – William

+0

문서에서'$ (request.auth.uid)'를 사용하여 값을 얻었습니다. if resource.data.readers [$ (request.auth.uid)] == true' – Hareesh

답변

0

데이터베이스 규칙에 대한 규칙을 auth = null로 변경해 보셨습니까?

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

컬렉션으로 작동하지 않는 기능은 여러 사용자가 각 문서에 액세스 할 수있는 여러 문서를 갖게됩니다. – William

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

//Firebase rules 
Rules:{ 
"documentToshare: { 

match documentToshare/documentUsers/&uid 
} 
} 

는 유효하지 아마 빠른 예를하고 있지만 그것은 당신에게