firebase - 在 Firebase 存储中,我可以使用 db "get" 规则吗?
问题描述
我正在尝试根据用户数据保护我的 Firebase(谷歌云存储)文件。在 firestore 中,我使用基于获取数据库内容的规则(在用户表中查找 uid 并匹配字段),这很好。我正在尝试在 firebase 存储中使用相同类型的规则,但在模拟器中我得到了Error: simulator.rules line [12], column [17]. Function not found error: Name: [get].; Error: Invalid argument provided to call. Function: [get], Argument: ["||invalid_argument||"]
. 我的规则如下所示:
match /b/{bucket}/o {
function isAuth() {
return request.auth != null && request.auth.uid != null
}
function isAdmin() {
return isAuth() &&
"admin" in get(/databases/$(database)/documents/users/$(request.auth.uid)).data.roles;
}
function clientMatch(client) { // expects user's "client" field to be ID of client
return isAuth() &&
client == get(/databases/$(database)/documents/users/$(request.auth.uid)).data.client;
}
match /P/Clients/{client}/{allPaths=**} {
allow read, write: if isAdmin() || clientMatch(client);
}
}
}
第 12 行是一个开始client == get
,在clientMatch()
. 我无法判断这些函数是否仅支持 Firestore (db) 规则,或者它们是否也适用于存储。
如果这不起作用,我有什么选择?人们如何查找用户数据以确保 Firebase 存储安全?
解决方案
您目前无法在存储规则中引用 Firestore 文档。如果您希望将其作为存储规则的一项功能,请提交功能请求。
请考虑改用 Cloud Functions 存储触发器在文件上传后执行一些额外的检查,并在您发现文件无效时将其删除。
推荐阅读
- r - 使用 Plotly 的高亮功能和 ggplotly 控制图例行为
- python - 解析的 TextX 模型没有“命令”属性
- javascript - 如何使用 ReactJS 使用 props 调用另一个组件中的函数?
- nginx - 在 Bigip 前面暴露部署在 Kubernetes 集群上的应用程序
- python - 将时间序列数据集与缺失值对齐以进行绘图
- angular - 'MonoTypeOperatorFunction 类型的参数
' 不能分配给 'OperatorFunction 类型的参数 ' - javascript - 如何使用 jQuery/JavaScript 为类设置样式?
- azure-devops - 在构建管道上更新 App config xml 文件中的内部版本号
- python - 在python中重复y/n问题的有效方法
- android - 如何在 Android 中添加标题以改造响应