基于引用数据类型的 Firebase Firestore 安全规则
Posted
技术标签:
【中文标题】基于引用数据类型的 Firebase Firestore 安全规则【英文标题】:Firebase Firestore security rules based on reference data type 【发布时间】:2018-08-18 18:04:12 【问题描述】:在 Firestore 中,我有一个拥有者的项目集合。
所有者可以是用户,应该允许他阅读他的文档。
使用userId
,您可以这样做:
allow read, write: if resource.data.userId == request.auth.uid;
但是对于 owner
参考字段,似乎没有关于安全规则的文档。
我试过这个安全规则:
allow read, write: if resource.data.owner == 'users/$(request.auth.uid)';
并像这样查询:
const owner = this.db.collection('/users').doc(auth.uid).ref;
const collection = this.db.collection('/items',
(ref) => ref.where('owner', '==', owner)
);
但我仍然收到缺少权限或权限不足。
【问题讨论】:
【参考方案1】:引用在安全规则中被视为paths,因此您可以将其与
function checkUser()
return request.resource.data.userReference == /databases/$(database)/documents/users/$(request.auth.uid);
使用前面带有databases/$(database)/documents
的完整路径很重要。在这种情况下,我有一个名为 users
的集合,每个用户 id 都是他们的uid
(看起来你也在这样做)
【讨论】:
【参考方案2】:这两条规则都适用于模拟器(Firebase 控制台):
allow read, write: if resource.data.owner == 'users/' + request.auth.uid;
和
allow read, write: if path(resource.data.owner) == /users/$(request.auth.uid);
但不在我的代码查询中。
【讨论】:
以上是关于基于引用数据类型的 Firebase Firestore 安全规则的主要内容,如果未能解决你的问题,请参考以下文章
尝试初始化 Cloud Firestore 时,firebase.firestore() 不是函数