2
我正试图创建一个允许用户在列表上进行协作的应用程序。每个用户都需要被邀请才能在列表中工作。Firestore数据库用户之间共享文档的规则和结构
我这样构建了我的数据(松散地基于this blog post)。 也可以根据需要更改此结构。
list
list_1:
users:
owner:
[email protected]: true
shared:
[email protected]: true
[email protected]: true
id
name
items:
item_1:
id:
name:
...
我想实现的目标:每个人都应该能够创建列表。他们的创建者然后成为创建列表的所有者。 只有“共享”文档中的所有者和用户应该能够读取和写入此列表。
我想权限设置应该看起来像这样。但这是行不通的:
service cloud.firestore {
match /databases/{database}/documents {
match /lists/{listId}/{anything=**} {
allow read, write: if !exists(resource.data.users.owner) ||
resource.data.users.owner == request.auth.token.email ||
request.auth.token.email in resource.data.users.shared
}
}
}
如果使用写访问列表这样的分享,你怎么了然后查询一个用户的所有列表?在这里他们表示,如果您使用数组,则无法获得包含类别cat的所有帖子:https://firebase.google.com/docs/firestore/solutions/arrays。你是如何解决这个问题的? –
@TheOddler您说得对,使用此解决方案无法查询一个用户的所有列表。为了使这成为可能,您可以将用户的ID存储为映射键。这也是您发布的链接中的建议。不幸的是,点不允许作为地图键。所以电子邮件地址将不起作用。还有一个基于地图的权限已知的问题。请参阅:https://stackoverflow.com/q/46674372/2837489 –
感谢您的答案!这就解释了为什么它不起作用。我虽然在地图上使用了uid,但仍然没有蛋糕。感谢您的链接!现在我将硬编码我允许的测试人员,并留意更新。 –