【发布时间】:2021-03-21 06:07:54
【问题描述】:
我正在开发一个 Flutter 应用并使用 Firebase 作为后端。在我的应用中,每个用户都需要注册才能使用该应用,并且用户的个人资料数据保存在 user_profile 集合中。
每个用户的个人资料数据都存储在集合中的单独文档中。 每个文档的文档 ID 等于用户首次注册时由 Firebase 身份验证创建的用户 ID。 我还将用户 ID 保存在每个文档中的一个字段(名为 uid)中,以及对应的用户。
对于安全部分,我希望每个用户只能阅读他/她自己的个人资料数据。我设置了以下规则:
// Rules for User Profile data
match /user_profile/{any} {
allow read: if (request.auth != null) &&
(resource.data.uid == request.auth.uid) &&
exists(/databases/$(database)/documents/users/$(request.auth.uid));
如果我按照上面的例子设置我的规则是否正确?
(1) 用户需要认证
(2) 传入请求中的uid需要与用户要阅读的对应文档中的uid字段相等。
(3) 请求中可用的uid的文档必须存在于对应的文档中
如果我让整个事情变得不必要地复杂,我无法清楚地告诉我。例如,规则 (1) 是否与规则 (2) 做同样的事情?虽然我有规则 (1) 和 (2),但它是否也增加了规则 (3) 的内容?
【问题讨论】:
-
请编辑帖子以将其缩小到一个问题。这里有三个不同的问题,这在技术上与 Stack Overflow 无关,可以关闭。您可以通过针对规则运行客户端应用程序代码来确定规则的正确性,以查看它是否按您期望的方式工作。这不是我们可以真正帮助您解决的问题,如果您的代码无法按您期望的方式工作,请与您的客户端应用程序代码一起进行查询。
-
这是一个问题。你让我更新它,我写了 2 个新问题。您似乎甚至没有阅读问题就写了相同的评论!
-
这里我数了三个问题。 1)如果我按照上面的例子设置我的规则是否正确? 2) 规则 (1) 是否与规则 (2) 做同样的事情? 3)虽然我有规则(1)和(2),但它是否也增加了规则(3)?
-
所有这些语句都相互关联。潜在的问题是相同的。应该如何为问题中定义的用例设置安全规则。
-
规则本身不会做任何事情。它们仅在客户端代码进行查询时触发。如果没有看到您的查询,以及对这些规则应该做什么以及它们如何没有按照您期望的方式工作的解释,我们无能为力。同样,我们无法为您确定规则是否正确 - 您可以通过实际再次查询它们并检查结果是否符合您的预期来自行测试。
标签: firebase flutter google-cloud-firestore firebase-authentication firebase-security