Firebase Firestore会阻止客户端在文档中创建字段

时间:2018-03-17 11:31:21

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

我正在努力寻找一种解决方案,以防止客户只是在文档中创建具有值的随机字段,在这些文档中他们具有Firestore中的写入权限。由于您无法像使用实时数据库那样限制对Firestore中单个字段的访问,因此这似乎很难实现。

解决方案可能是不允许创建字段并让客户更新字段,但这意味着您必须预先创建文档的字段,这在我看来并不是一个很好的解决方案,特别是如果您有文档每个用户,动态创建并且必须使用云函数来预先创建文档中的字段似乎没有道理。

有没有人有更好的解决方案?

2 个答案:

答案 0 :(得分:2)

正如Firebase Firestore文档中所述,您实际上可以阻止或允许在某些字段中进行写入或读取。这可以通过添加类似于此的规则来实现:

match /collection/{doc} {
  allow update: if request.resource.data.field == resource.data.field;
}

基本上会检查更新后该特定字段是否具有完全相同的值。您还可以添加规则以检查请求的值是否在范围之间或等于(您的预定义值)。

allow update: if request.resource.data.field > 0 && request.resource.data.field > 100;

答案 1 :(得分:0)

您可以检查Microsoft.Bot.Schema.ErrorResponseException: Operation returned an invalid status code 'BadRequest' at Microsoft.Bot.Connector.Conversations.ReplyToActivityWithHttpMessagesAsync(String conversationId, String activityId, Activity activity, Dictionary`2 customHeaders, CancellationToken cancellationToken) at Microsoft.Bot.Connector.ConversationsExtensions.ReplyToActivityAsync(IConversations operations, String conversationId, String activityId, Activity activity, CancellationToken cancellationToken) at Microsoft.Bot.Builder.BotFrameworkAdapter.SendActivitiesAsync(ITurnContext turnContext, Activity[] activities, CancellationToken cancellationToken) at Microsoft.Bot.Builder.TurnContext.<>c__DisplayClass22_0.<<SendActivitiesAsync>g__SendActivitiesThroughAdapter|1>d.MoveNext() --- End of stack trace from previous location where exception was thrown --- 的键,并且仅当它不包含您要保持只读的字段时才通过它(这意味着请求没有尝试更新该字段) 。例如:

request.resource

(感谢James Quallsinspiration!)