Firebase Storage文档中使用的参考值在Firebase Storage安全规则中以项目ID为前缀



考虑以下Firebase Storage安全规则:

rules_version = '2';
service firebase.storage {
function postRef(postId) {
return /databases/(default)/documents/posts/$(postId);
}
match /b/{bucket}/o {
match /posts/{postId}/images/{imageId} {
allow create: if request.auth != null
&& firestore.get(firestore.get(postRef(postId)).data.topic).data.something;
}
}
}

post文档的topic字段包含一个格式为topic/{topicId}的引用数据类型的值。

我面临的问题是,函数firestore.get接受/databases/(default)/documents/posts/{postId}格式的路径,然而,从函数firestore.get返回的post文档的topic字段中的引用包含/projects/my-project/databases/(default)/documents/topic/{topicId}格式的路径-注意它以项目id为前缀。

这会导致一个错误,因为firestore.get函数期望的路径没有项目id (/databases/(default)/documents/topic/{topicId})。

有趣的是,Firebase Firestore安全规则中使用的相同规则工作得很好,在获取时项目为参考值添加前缀没有问题。

我的问题是,是否有一些方法,使用Firebase存储安全规则,使此工作?我有一个替代解决方案,涉及从Firestore中删除引用数据类型,并用文档ID的字符串值替换它们。但是,我希望避免这种解决方案,因为它会引入不必要的代码库重构。

目前,Firebase文档本身没有替代的解决方案。对于这个问题,您现在可能不得不坚持使用您的变通方法。跨服务安全规则对于Firebase来说仍然是新的。所有可用的功能都在本文档中说明。

你可能需要为这种情况提交一个特性请求。

最新更新