2017-03-07 15 views
5

私は、複数の人に同じメッセージを送信できるメッセージングiOSアプリケーションを開発しています。メッセージはfirebaseストレージに保存されます。私は、メッセージを送信したユーザーのみがストレージからメッセージを読むことができるようにしたいと考えています。私はすでにfirebaseデータベースにこのルール構造を実装しています。Firebase Storage uidsのリストのカスタムメタデータセキュリティルール

これを格納用に実装するには、メッセージを作成した人のfromUidキーを含め、メッセージファイルcustomMetadataにuidのリストを追加します。私は私のiOSアプリで次の操作を行います。

var metadataValues = [String:String]() 

    for friendUid in friendsSelected.keys { 
     metadataValues.updateValue(friendUid, forKey: friendUid) // how do I access these values in my security rules 
    } 
    metadataValues.updateValue(senderUid, forKey: "fromUid") // how do I access this in security rules 
    let messageMetadata = FIRStorageMetadata() 
    messageMetadata.customMetadata = metadataValues 

は、これは私の読み取りのための私の試みであったとFirebaseストレージにメッセージノードのためのセキュリティルールを記述するが、それは動作しません。また、ドキュメントは役に立たないのです。

match /messages/{messageId} { 

     allow read: if request.auth.uid == resource.metadata.request.auth.uid; // I want all friend uids to be able to read file 
     allow write: if request.auth.uid == resource.metadata.fromUid; // only the person who create the message can access it 

} 

私の試行はうまくいきません。 'fromUid'キーを使用してcustomMetadata変数にアクセスするにはどうすればいいですか?また、友人は自分のセキュリティルールで 'request.auth.uid'を使用しますか?

傍注として、私はcustomMetadataに追加するキーの数に制限はないと仮定します。

+0

これは本当に助けになります。何らかの理由で私が試したことのすべてがうまくいかない。 – Edward

答えて

2

私はそれを解決することができました。私が持っていた問題は、私がJavascriptに精通していなかったので、構文が間違っていたということでした。 Javascriptを調べた後、私はすぐにそれを解決することができました。

私の答えは他の誰にも役立ちますが、私に似た位置にいる場合はJavascriptの基礎を学ぶことをおすすめします。

ファイルメタデータにアクセスするには、書き込みが実行される前にrequest.resource.metadataを使用し、アップロード後にアクセスするresource.metadataを使用することにも注意してください。

match /messages/{messageId} { 

     allow write: if request.resource.metadata['fromUid'] == request.auth.uid; 
     allow read: if resource.metadata[request.auth.uid] == request.auth.uid; 
    } 
関連する問題