所以我试图将规则设置为存储,但我需要访问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));
}
}
}
但这不起作用:/
谢谢你的帮助!
一个Firebase产品的安全规则无法引用另一个Firebase产品。性能影响太大了。
如果您需要这样的产品间一致性,则可能需要考虑从云功能进行写入。虽然这不会突然允许跨产品安全规则,但它确实意味着您确保代码执行写入并且代码在比普通用户的电话或PC更可靠的环境中运行。
它可能的例子:
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
}