2017-03-12 94 views
0

我嘗試使用元數據在火力地堡存儲意味着安全規則,它不工作:火力地堡儲存安全規則不工作

service firebase.storage { 
    match <firebase-storage-url> { 
    match /{userId}/{allPaths=**}{ 
    allow read: if resource.metadata.userid== userId; 
    allow write: if resource.metadata.userid== userId 
    } 
    } 
} 


StorageMetadata metadata = new StorageMetadata.Builder() 
      .setCustomMetadata("userid", user.ID) 
      .build(); 

filepath = mStorage.child(user.ID + "/" + String.valueOf(chatmessageamount + 1) + ".mp3"); 

有人能幫助我嗎?

+0

請說明您的具體問題或添加額外的細節,突顯正是你需要的。正如目前所寫,很難確切地說出你在問什麼。請參閱如何問問頁面以獲取幫助以澄清此問題。 http://stackoverflow.com/help/how-to-ask –

+0

我想使用元數據的安全規則,並說明我是如何實現的,它不工作 –

+0

第一部分是存儲安全規則。第二部分是我如何將文件上傳到Firebase存儲 –

回答

1

我想你想要的是:

service firebase.storage { 
    match /b/{bucket}/o { // this should be this string literally, no need to put in the bucket name 
    match /{userId}/{allPaths=**}{ 
     allow read: if request.auth.uid == userId; 
     allow write: if request.resource.metadata.userId == userId; // request.resource is the resource being written, resource is what already exists (which on first write will be null) 
    } 
    } 
} 
+0

我試着不工作。讀取始終工作,不管限制 –

+0

我沒有使用該行:match/b/{bucket}/o {也許這是讀取始終工作的原因。使用水桶線而不是我的項目名稱的重要性是什麼? –

+2

規則匹配對象的RESTful路徑(即'/ b/some-bucket/o/path/to/object'),'{bucket}'捕獲任何bucket名稱。沒有這一點,規則應該失敗,因爲它們不應該匹配。請注意,如果您通過下載令牌下載,則會忽略這些規則。 –