是否可以使用Firebase的firestore设置存储规则?

时间:2018-03-01 15:43:50

标签: firebase google-cloud-firestore firebase-security-rules

所以我试图将规则设置为存储,但是我需要访问firestore来设置它。

以下是我的例子:

在我的firestore数据库中,我有一个users集合,其集合名为items。路径如下所示:/users/items/{itemId}

我希望用户可以使用此路径读取和写入文件到存储中:/items/{id}/file.png仅当项目的{id}已存在于firestore数据库的items集合中时。 有没有办法使用firestore将规则正确设置到存储中?

我试过了:

service firebase.storage {
  match /b/{bucket}/o {
    match /items/{item}/{allPaths=**} {
        allow read, write: if exists(/databases/{database}/documents/users/$(request.auth.uid)/items/$(item));
    }
  }
}

但这不起作用:/

感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

一个Firebase产品的安全规则无法引用另一个Firebase产品。性能影响太大了。

如果您需要这样的产品间一致性,您可能需要考虑从云功能进行写入。虽然这不会突然允许跨产品安全规则,但它确实意味着您确保它是您的代码执行写入并且代码在比普通用户的手机更可靠的环境中运行PC。

答案 1 :(得分:0)

可能的例子:

allow write: if isAdmin(request.auth.id) && request.resource.size < 10 * 1024 * 1024 || request.resource == null

function isAdmin(userId) {
    return firebase.database('users').child(userId).child('isAdmin').val() == true
}