2017-11-30 7 views
2

데이터베이스에는 "컬렉션"컬렉션이 있고 컬렉션 내의 각 문서에는 해당 문서에 대한 액세스 권한을 가진 사용자의 "uid"가 포함 된 개체 "구성원"이 있습니다.개체 데이터 형식에 대한 Firestore 규칙

Collection--->document-->members = {"BZntnJO2PVS8OZ9wctwHiyxBytc2": true} 

나는 규칙의 많은 다른 유형을 시도했지만이 규칙 중 어느 것도 작동하는 것 같다되지

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /collection/{documentId} { 
     allow read: **** 
} 
} 

1)

allow read: if get(/databases/$(database)/documents/collection/$(documentId)).members[request.auth.uid] != null 

2)

allow read: if resource.data.members[request.auth.uid] != null 

3)

allow read: resource.members[request.auth.uid] != null 

4)

allow read: if request.resource.data.members[request.auth.uid] != null 

5)

allow read: request.resource.members[request.auth.uid] != null 

IT는 경우 FireStore 버그 될 수 있을까?

답변

3

사용자가 만든 속성에서 액세스하려면 data 속성에 액세스해야하므로 규칙 1, 3 및 5는 작동하지 않습니다.

request.resource은 일반적으로 데이터베이스에 보내는 데이터를 말하며, 일반적으로 쓰기 작업의 경우에 그러므로 request.resource.data은 읽기의 경우 비어 있기 때문에 규칙 4가 작동하지 않습니다 .

규칙 # 2는 올바르게 보이지만 단일 문서를 가져 오는 경우에만 작동합니다. 검색어는 조금 까다 롭습니다.

특히 "내 모음에있는 모든 문서 가져 오기"종류의 쿼리를 실행하는 경우 Cloud Firestore는 데이터베이스의 모든 레코드를 검색하여 사용자가 액세스 할 수 있도록 할 시간이 없습니다. 이 쿼리를 거부합니다. 대신, Cloud Firestore에서 검색 할 모든 문서가 유효 함을 "입증"할 수있는 쿼리를 실행해야합니다. 예를 들어, 귀하의 쿼리가 "내 컬렉션에있는 모든 문서 가져 오기 - 멤버 (.ID)! = null"와 같은 것인지 확인하고자 할 수 있습니다. Cloud Firestore 규칙은 쿼리와 규칙을 비교할 수 있으며 액세스 권한이있는 문서 만 얻을 수 있다는 만족감을 느낄 수 있습니다.