2016-07-04 4 views
3

Firebase Storageのパスへのアップロードをグループ単位で制御する方法はありますか? たとえば、特定のパスにしかアップロードできない場所やチームをアップロードできる管理者グループがあります。カスタム認証を使用せずにfirebase storageへのグループアクセスを作成する

+0

[ユーザーデータグループガイド](https://firebase.google.com/docs/storage/security/user-security)(グループのアプローチについて)、[ユーザーグループ、認証要求、カスタムトークン] (https://groups.google.com/forum/#!searchin/firebase-talk/groups$20auth$20claims%7Csort:relevance/firebase-talk/77i9CRlwg88/iQsE78CbGQAJ)グループディスカッション。 – Kato

答えて

7

少しずつ検索したところ、私はすぐに答えを見つけることができなかったので、今までのものを投稿します。これを行うための他の(より良い)方法があるかどうかを知ることは良いことです。

私は別のサーバーを使用しないようにしているので、カスタム認証トークンがありません。ただし、request.auth.uidはストレージルールで使用できます。 uidプロパティは、Auth領域で定義されたユーザーの1つに一致します。 request.auth.uidが定義したグループ内にあるかどうかをチェックする関数をストレージルールに作成する必要があります。

ファイアベースのストレージルールには、一意の構文があります。それはJavaScriptのように見えるが、そうではない。関数を定義することはできますが、その中にvarを宣言することはできません。さらに、利用可能なjavascriptのようなメソッドのサブセットがあります。例えば

、私が最初に失敗し、次を試してみました:

function isAdmin() { 
    return ["value","list"].indexOf(request.auth.uid) > -1; 
} 

service firebase.storage {...} 

私はVARを定義しようとしたときに、ルールエディタはエラーを投げたまたは私は.indexOfを使用する際には、必ず「不正」が返さどちらか。

以下は、私のために働いてしまった。

function isAdmin() { 
    return request.auth.uid in { 
    "yaddayadddayaddUserIDKey":"User Name1" 
    }; 
} 
function isSomeOtherGroup() { 
    return request.auth.uid in { 
    "yaddayaddaSomeOtherUID":"User Name2", 
    "YaddBlahBlahUID":"User Name3" 
    }; 
} 

service firebase.storage { 
    match /b/<your bucket here>/o { 
    match /{allPaths=**} { 
     allow read, write: if isAdmin(); 
    } 
    match /path/{allPaths=**} { 
     allow read, write: if isSomeOtherGroup() || isAdmin(); 
    } 
    } 
} 
+0

私はこの解決策を試しましたが、なんらかの理由で動作しませんでした。途中で見つけたその他の警告はありましたか? –

+0

私は電子メールアドレス認証だけを使用していました。私はGoogleやfacebookの認証で試していませんでした。 – ecalvo

4

@ ecalvoの回答にコメントするには十分な評判がありません。だから私は答えを加えています。機能isAdmin()は、次のようリストを提供することができます:実装の

function isAdmin() { 
    return request.auth !=null && request.auth.uid in [ 
     "uidAdmin1", 
     "uidAdmin2", 
     "uidOfOtherAdminsAsCommaSeparatedStrings" 
    ]; 
} 

残りは@ecalvoの答えから借用することができます。私は今それがより明確であると感じる。 @ecalvoの答えでは、私はuidだけを比較しなければならないときになぜユーザー名を与えなければならないのか混乱しました。

関連する問題