首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于下面的场景,正确的Fi还原安全规则是什么?

对于下面的场景,正确的Fi还原安全规则是什么?
EN

Stack Overflow用户
提问于 2021-04-03 18:40:34
回答 1查看 39关注 0票数 0

我有一个像这样的消防局

  • 用户
    • {userId}
      • 板子
        • {boardId}
          • 板数据

我有这样的消防安全规则。

代码语言:javascript
复制
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth != null;
    }
    match /users/{userId}/{document=**} {
      allow read, create, update, delete: if request.auth != null && request.auth.uid == userId ;
    }
  }
}

我该怎么制定规则-

  • 用户只能访问自己的数据。
  • 没有人可以访问根用户集合。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-03 19:27:55

规则中有一个重叠匹配语句,因为您使用match /{document=**}映射到数据库中的所有文档(参见文档)。

因此,既然:

  1. 在多个允许表达式匹配请求的情况下,如果任何条件都是真,则允许访问,并且
  2. 对于match /{document=**}语句,您的规则是allow read: if request.auth != null;

每个经过身份验证的用户都可以读取任何user文档(您不像对users集合那样限制users文档。实际上,您不能这样做,因为match /{document=**}没有专门针对users集合)。

最好是移除这个块,只保留下面的块。

代码语言:javascript
复制
match /users/{userId}/{document=**} {
  allow read, create, update, delete: if request.auth != null && request.auth.uid == userId ;
}

如果需要授予对其他集合的读访问权限,请为每个集合使用规则,而不是使用通配符方法。

PS:您可以反复检查是否真的需要执行match /users/{userId}/{document=**},它授予对users文档的所有子集合的访问权限。您可能只需要做match /users/{userId}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66934680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档