firebase - Firestore 安全规则获取参考字段/ID
问题描述
我有两个集合——租户和用户。
租赁文档有一个名为“landlordID”的字段,类型为 REFERENCE(不是字符串)。
现在,在我的 Firestore 安全规则中,我希望仅当该租户的landlordID 字段与发出请求的用户的 uid 匹配时才允许更新该租户,即request.auth.uid
.
将其读作“如果创建用户的用户经过身份验证,则允许更新租赁文档,因此 request.auth.uid != null,并且landlordID 字段的 ID 应等于 request.auth.uid 的 ID。
因此代码应该是这样的:
service cloud.firestore {
match /databases/{database}/documents {
match /tenancies/{tenancyID}{
allow update: if request.auth.uid != null &&
request.auth.uid == get(resource.data.landlordID).id
}
}
我也试过get(/databases/$(database)/documents/users/$(resource.data.landlordID)).data.id
支持我的数据库的屏幕截图
这应该很简单,但 get() 根本不起作用。Firebase Docs,滚动到“访问其他文档”对我的情况根本没有帮助,我不知道如何让它工作。
如果引用不能像这样使用,那将是一种耻辱,因为它们就像文档的任何其他字段一样。
解决方案
这是我制作的一个对我有用的功能。id
我猜你有一个用户集合,其中的用户与他们的用户相同auth.uid
function isUserRef(field) {
return field in resource.data
&& resource.data[field] == /databases/$(database)/documents/users/$(request.auth.uid)
}
根据您的用例进行调整,您将调用该函数:isUserRef('landlordID')
尽管它末尾的 ID 有点误导,因为该字段实际上是一个参考。
推荐阅读
- javascript - 如何将 Javascript 音频 blob 写入 Python wave?
- excel - Excel - 导出为 csv 并保存到另一个位置
- java - AEM WKND Apache Maven 构建失败
- git - 如何从远程仓库中的 master 删除 GIT 分支并从另一个分支启动新分支?
- sonarqube - 在 mac 中找不到 sonar-scanner 命令
- reactjs - 如何使用 Material UI 自动完成和反应钩子填充多个输入字段的值
- php - 保护 APP_KEY 以进一步加强 Laravel 中的加密
- python - 如何从 pandas 生成 CSV 文件并将其返回到 django 视图?
- python - (discord.py)403 禁止(50001)在尝试删除消息时丢失访问错误,尽管拥有所有权限和意图
- rust - 从 cli app 中的应用程序目录读取文件