【问题标题】:Firestore security rules, restricting child/fieldFirestore 安全规则,限制子/字段
【发布时间】:2018-10-25 06:56:30
【问题描述】:

Firebase RTDB 的 newData.hasChildren(['name', 'age', 'gender']) 在 Firestore 中的等效方式是什么?如何限制子/字段?

更新: 我已使用 Firestore 规则更新了我的问题并详细解释了我的问题。

match /{country} {
  allow read: if true;
  allow create: if isAdministrator()
              	&& incomingData().countryCode is string
              	&& incomingData().dialCode is string;
  allow update: if (isAdministrator() || isAdminEditor())
              	&& incomingData().countryCode is string
              	&& incomingData().dialCode is string;
  allow delete: if isAdministrator();
}

createreaddelete 正在按预期工作。但是,如果我尝试使用 Hashmap 对任何未提及的孩子进行更新,它将更新而不会引发任何异常,这与 Firebase 数据库规则不同,我们在 newData.hasChildren([]) 中提到了所有可能的孩子。

【问题讨论】:

  • 您的更新规则似乎根本没有检查写入的数据。究竟是什么规则没有按您预期的方式工作?
  • @DougStevenson 我已经更新了我的update 规则。现在,如果我尝试使用未提及的孩子进行更新,例如“countryAliasName”或其他内容,它将更新而不会引发任何异常。如何避免这种情况?
  • 什么是incomingData()
  • @DougStevenson 我的错,对不起。 icomingData()request.resource.data

标签: firebase google-cloud-firestore firebase-security


【解决方案1】:

您现在所做的只是检查两个提供的字段值是否为字符串。您不要求更新数据中只存在那些 to 字段。您可以做的是使用数据映射的keys() 方法来验证更新中仅存在某些字段。例如,这可能有效:

request.resource.data.keys().hasOnly(['countryCode', 'dialCode'])

List 对象上还有许多其他方法可以帮助您确定其内容。

【讨论】:

  • 这正是我想要的!谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
相关资源
最近更新 更多