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と評価されていないはずですから、データを書き込むことができますか?

私はこれらのルールがこれまでに一緒に外出するのが楽しいとは思わないので、感謝の意をもって受け入れられたアイデア。あなたが本当に条件に指定する場合は

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

または、::

乾杯すべて

答えて

1

私はこの内蔵のパスマッチャーバージョンを使用してお勧めします

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をインストールして初期化し、できるだけクエリを簡略化しましたが、私が正常に書き込むことができる唯一のルールは 'match/{セグメント= **} {許可する読み取り、書き込み;} '。あなたの例を試しましたが、同じパーミッションエラーが発生します。ルールをデバッグする方法や、要求に失敗したことを確認する方法はありますか? – popClingwrap

+0

だから、私は 'request.path'に何の幸運もありません。どのように私がそれをフレーズにしても失敗しますが、ここでは必要ではないと言って、2番目の例は私を最後にソートしました。私はここで何かを学んだように感じますが、私は本当に何かを説明することはできません - 物事は私の頭の中でちょっとはっきりしていますので、ありがとうございます:) – popClingwrap

+0

@MikeMcDonald request.path [n]は決して働いていません。私は天気をチェックしようとしています。現在のユーザーはパスと同じuidを持っています。 'request.auth.uid == request.path [10]'ここで10は例と同じ方法で計算されます。私は10以外のポジションでチェックしたこともありますが、まだ動作していません。また、最初に '/'を 'request.auth.uid'に追加して確認しましたが、始めに '/'があるかもしれないと思っていましたが、まだ動作していません。何が問題なの? –

関連する問題