Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取
Posted
技术标签:
【中文标题】Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取【英文标题】:Firebase Firestore Securitty Rule | Allow read if field value same as auth uid 【发布时间】:2021-09-08 02:34:37 【问题描述】:我想从
中读取所有文档使用这个查询
QuerySnapshot data = await firestore
.collection('Order')
.where('uId', isEqualTo: auth.currentUser!.uid)
.limit(20)
.get();
并且还想应用安全性读取仅请求的身份验证 uid 与 uId/sellerUId 相同。
我已经尝试使用此安全规则
match /Order/uniqueCode
allow read: if get(/databases/$(database)/documents/Order/$(uniqueCode)).data.sellerUId == request.auth.uid ||
get(/databases/$(database)/documents/Order/$(uniqueCode)).data.uId == request.auth.uid;
allow write, update, delete: if true;
【问题讨论】:
【参考方案1】:如果要比较的字段已经在文档中,则无需指定完整路径。
match /Order/uniqueCode
allow read: if resource.data.sellerUId == request.auth.uid || resource.data.uId == request.auth.uid;
allow write, update, delete: if true;
您可以阅读有关数据验证的更多信息here
【讨论】:
【参考方案2】:我不确定这是否会导致您的问题,但您可能不想get()
与您正在保护的同一个文档。相反,您可以使用resource
来引用它:
match /Order/uniqueCode
allow read: if resource.data.sellerUId == request.auth.uid ||
resource.data.uId == request.auth.uid;
allow write, update, delete: if true;
【讨论】:
以上是关于Firebase Firestore 安全规则 |如果字段值与 auth uid 相同,则允许读取的主要内容,如果未能解决你的问题,请参考以下文章
为啥 firebase_firestore 安全规则不适用于文档读取
在不使用 Firebase 身份验证的情况下设置 Firestore 安全规则
Cloud Firestore 安全规则只允许从 Firebase 函数写入
基于引用数据类型的 Firebase Firestore 安全规则
在 Angular 11 网站上使用 Firestore 和 Firebase 存储进行图像上传功能导致来自 Firebase 的不安全规则通知