firebase - 嵌套的 firebase-firestore 规则:父文档中的所有者 ID
问题描述
我无法让这些规则起作用:我有一个包含项目的集合,它们都有一个所有者。应该允许所有者读/写他的项目和子集合 working_copies。
此实现成功地允许读取项目,但在从子集合中读取 working_copy 时失败(缺少或权限不足)。我怀疑它试图在子文档中找到所有者。
service cloud.firestore {
match /databases/{database}/documents {
match /projects/{projectId} {
allow read, write: if
resource.data.owner == request.auth.uid;
match /working_copies/{doc} {
allow read, write: if true;
}
}
}
我也尝试在项目路径或 working_copies 路径中使用此条件,但它也都失败了:
get(/databases/$(database)/documents/projects/$(projectId)).data.owner == request.auth.uid
当我使用递归通配符进行嵌套时,上述所有内容也会失败:
match /projects/{projectId=**} {
...
奇怪的是,我认为第一个版本直到几天前才可以使用。
我使用 angular/angularfire 并像这样调用请求:
this.db.collection('projects').doc('3279').collection<ProjectData>('working_copies').valueChanges().pipe(...
在规则模拟器中,它是绿灯。
解决方案
我终于找到了解决方法:
!('owner' in resource.data) || resource.data.owner == request.auth.uid
这使它接受子文档不再提供所有者。所以看起来,当嵌套规则时,父规则也适用于子文档。
推荐阅读
- python-3.x - 无法跳出 Python While 循环
- javascript - 覆盖 Axios 缓存适配器中的缓存路由
- ios - Swift:构建应用程序时文档文件被删除
- c++ - 子线程内的 C++ 套接字 read() 给出 SIGABRT
- python - labels.data:无法将 cuda:0 设备类型张量转换为 numpy。首先使用 Tensor.cpu() 将张量复制到主机内存
- range - 清除特定范围的内容
- c++ - C ++中奇怪的命名空间概念
- webpack - 在电子打包所有内容后,Prisma Client 没有找到查询引擎
- c# - 尝试添加相机更改组件时出现错误“找不到脚本类”
- java - 登录android studio后如何在另一个活动中打开应用程序