我的团队最近对此进行了讨论,似乎无法确定实际/预期的行为:
如果您有以下安全规则:
match /categories/{document=**} {
allow update: if request.auth.uid != null
&& request.resource.data.firstName is string
&& request.resource.data.lastName is string;
}
您可以使用以下数据从前端到/ categories /创建更新语句:
{
firstName: 'A valid firstName'
}
安全规则是否应该通过或失败?
开发人员提供的数据显示在request.resource.data中 是包含字段和值的地图。未提供的字段 资源中存在的请求被添加到 request.resource.data
相关问题:
{age: 28}
问题3包含更多详细信息(架构问题) 假设您有这样的模型:
interface Category {
firstName: string;
lastName: string;
age?: int;
groupId?: string;
}
现在我们创建一个像这样的安全规则:
match /categories/{document=**} {
allow update: if request.auth.uid != null
&& request.resource.data.firstName is string
&& request.resource.data.lastName is string;
&& request.resource.data.age is int;
&& request.resource.data.groupId is string;
}
这些场景的无非常适合可选属性。因为如果必须提供所有属性(如方案1中所示),那么它实际上不是可选属性。如果你不提供它们,就像在场景2中一样,那就失败了。
也许我在这里遗漏了一些东西,关于如何使用写入firestore的可选属性来验证数据的基本指南?
可选参数的安全规则,如下所示:
match /categories/{document=**} {
allow update: if request.auth.uid != null
&& request.resource.data.firstName is string
&& request.resource.data.lastName is string;
&& request.resource.data.age is int; // ignore if NOT provided
&& request.resource.data.groupId is string; // ignore if NOT provided
}