0

일부 Firestore 보안 개념을 고민하는 데 어려움을 겪고 있습니다. request.path 속성을 기반으로 규칙을 설정하고 싶습니다. 나는이 간단한 based on the docs해야한다 생각 request.path를 사용하여 Cloud Firestore 보안 규칙을 설정하려고 시도했습니다.

this.myAngularFirestore.doc('/appUsers/'+this.auth.auth.currentUser.uid).set({name: this.auth.auth.currentUser.displayName}) 
     .then(()=>console.log('Added user')) 
     .catch(err=>console.log('Could not add user:', err.message)); 

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /{document=**} { 
     allow read, write: if request.path[0]=='appUsers'; 
    } 
    } 
} 

... 나는 다음과 같은 문서를 추가 할 AngularFire2를 사용 ...하지만 모든 I :

내 규칙이있다 오류는 Missing or insufficient permissions입니다.

내가 올바르게 로그인되어 있고 allow read,write: if true;으로 보안을 열면 쿼리가 작동하는 것을 알 수 있습니까? request.path[0]은 여기에 appUsers 문자열로 평가해야하며 데이터를 쓸 수 있어야합니까?

나는이 규칙을 지금까지 함께 재미있게 찾지 못해서 기꺼이 받아 들여지는 아이디어가 있습니다.

건배 모든

답변

1

I 좋겠 이것의 기본 경로 정규 버전 사용하는 것이 좋습니다 :

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /appUsers { 
     allow read, write; 
    } 
    } 
} 

또는, 당신은 정말 조건에 지정하려면 :

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /{pathSegment} { 
     allow read, write: if pathSegment == "appUsers"; 
    } 
    } 
} 

request.path은 전체 경로입니다 (예 : /projects/<projectId>/databases/(default)/documents/appUsers, 이는 실제로 request.path[5]을 원한다는 것을 의미합니다.) 이 일을하는 f).

+0

그건 좋은 말이지만 나에게는 효과가없는 것 같습니까? 필자는 AngularFire2를 설치하고 초기화한 새로운 Angular 프로젝트 인 Firestore 데이터베이스와 Firestore 데이터베이스를 설정하고 가능한 한 쿼리를 단순화했습니다. 그러나 내가 성공적으로 작성할 수있는 유일한 규칙은'match/{ 세그먼트 = **} {허용 읽기, 쓰기;}'. 귀하의 예제를 시도했지만 단지 같은 권한 오류가 발생합니다. 규칙을 디버깅하거나 요청에서 무엇이 실패했는지 확인하는 방법이 있습니까? – popClingwrap

+0

그래서'request.path'는 전혀 행운이 없습니다. 아무리 어쨌든 문법적으로 실패합니다. - 하지만 여기서는 필요하지 않다고 말했고 두 번째 예는 나를 결국 분류했습니다. 나는 여기서 뭔가를 배웠던 것처럼 느낀다. 그러나 나는 정말로 설명 할 수 없다. - 내 머리 속에서 일들이 조금 더 명확하다. 감사 : – popClingwrap

+0

@MikeMcDonald request.path [n]은 나를 위해 일하지 않는다. 현재 사용자가 경로와 동일한 uid를 가지고 있는지 날씨를 확인하려고합니다. 'request.auth.uid == request.path [10]'여기서 10은 예제와 같은 방식으로 계산됩니다. 나는 10 점이 아닌 다른 직위를 확인해 봤지만 여전히 효과가 없다. 또한 '/'을 'request.auth.uid'에 추가하여 경로가 처음에는 '/'을 가질 수 있다고 생각하지만 시작은 여전히 ​​작동하지 않습니다. 무엇이 문제 일 수 있습니까? –