我开始使用Cloud Firestore,并且对安全规则有疑问。我需要知道是否可以为特定字段设置写权限。例如,我有一个名为“ tickets”的集合,每个文档都是:
ticket\
id: "firebaseIdklnalskdla",
status: "in_progress"
creation_date: "28/08/2018"
我只需要对“状态”字段指定“写”权限。有可能吗?
答案 0 :(得分:3)
Firestore确实没有按域安全规则。规则仅适用于整个文档。因此,如果某人可以阅读文档,则他们始终可以阅读文档的所有字段。同样,如果某人可以编写文档,则他们可以编写文档的所有字段。
您可以做的一件事是,当某人尝试编写文档时,如果该文档的目标是任何不应写的字段,则拒绝该写操作,这涉及检查请求的大小和内容。您将使用request.resource
检查写入的内容,然后使用其data
属性检查其是否仅包含可写字段。因此,类似这样的内容可以查看更新是否仅包含有效的可写字段:
allow update: if request.resource.data.size == 1 && request.request.data['fieldname'] != null
您的规则可能更复杂,或者需要不同的策略来检查有效写入。
另一种更常见的做法是将文档分成两个集合,一个集合包含可写字段,另一个集合包含只读字段。
答案 1 :(得分:0)
安全规则可能看起来像这样(未经测试):
service cloud.firestore {
match /databases/{database}/documents {
// here one can limit per user and other conditions, not per field.
match /tickets/{ticket} {
allow update: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
}
}
答案 2 :(得分:0)
Firebase团队提供了一个非常有趣的说明性视频,他们在其中谈论这种情况:https://youtu.be/8Mzb9zmnbJs?t=1313 创建文档后,您可以设置实际上可以更改的字段的限制。