在处理Firestore Security规则时,我发现无法在字段级上指定读取/写入访问权限。 可以做的所有事情都是在文档/集合级别指定访问权限。
但是这不是强制执行真正奇怪的数据库结构吗?
考虑以下示例:
[
{
"id": 15,
"name": "room1",
"color": "red",
"owner": "Tim"
},
{
"id": 642,
"name": "room2",
"color": "green",
"owner": "Charles"
},
{
"id": 989,
"name": "room3",
"color": "blue",
"owner": "Jane"
}
]
在此示例中,我希望例如Jane会阅读集合中每个条目的字段id
name
和owner
,但我不希望她看到另一个房间的字段color
人。
使用这样的数据结构当然是可能的:
[
{
"id": 15,
"name": "room1",
"owner": "Tim",
"private_values": {
"color": "red"
}
},
{
"id": 642,
"name": "room2",
"private_values": {
"color": "green"
},
"owner": "Charles"
},
{
"id": 989,
"name": "room3",
"private_values": {
"color": "blue"
},
"owner": "Jane"
}
]
我所做的一切只是将“私有”值(在这种情况下仅是颜色)移动到另一个额外的集合中。
这样,我可以为根对象设置一个规则,并为对象private_values
设置另一个额外的规则。
即使这完全有可能做到,但是当推断出更大的示例时,例如会有更多的用户组,他们都需要能够看到不同的字段,我认为它不是特别干净。
是否有比我刚才解释的方法更干净,更好的方法,或者还有其他我想念的东西?
致谢
答案 0 :(得分:2)
您什么都没错过。这正是您应该做的。 Firestore中的文档是最精细的操作单元。
请注意,您也不能阅读部分文档(如果要阅读任何字段,则必须阅读所有字段)。如果编写的Cloud Function在文档更改时触发,则您始终会收到整个文档的内容,而对于单个字段更改时则无法编写触发器。