gpt4 book ai didi

firebase - Firestore安全规则中的递归通配符未按预期工作

转载 作者:行者123 更新时间:2023-12-04 10:23:02 24 4
gpt4 key购买 nike

我有一个这样的数据结构(当然是Collections和Documents而不是JSON,但您知道了):

{
users: {
user1:{
name: Alice,
groups: {
groupA:{subbed:true},
groupB:{subbed:true}
}
},
user2:{
name: Bob,
groups: {
groupC:{subbed:true},
groupD:{subbed:true}
}
}
}
}

基本上,这是注册用户ID和每个用户订阅的组ID。我想编写一条安全规则,仅在用户配置文件和子集合为当前身份验证用户时才允许访问它们,并且根据我对文档的阅读,我认为通配符可以实现这一点...
match /users/{user=**}{
allow read,write: if user == request.auth.uid;
}

将其放置在适当的位置后,我可以很好地阅读 user文档,但是在尝试阅读 groups子集合时出现权限错误。我只能通过明确匹配子集合来使其工作...
match /appUsers/{user}{
allow read,write: if user == request.auth.uid;

match /groups/{group}{
allow read,write: if user == request.auth.uid;
}
}

...所以我的问题是,两个示例之间有什么区别?我对递归通配符有什么误解?我认为第一个示例的 {user=**}部分应授予对 user文档及其所有子集合,子子集合等的访问权限(对于授权用户),并且应无限制地使用(应针对授权用户),并且无需为数据专门编写规则像我在第二个示例中所做的那样向下存储。

我只是和Firestore呆了一小段时间,所以这可能是一个愚蠢的问题:)

谢谢大家

最佳答案

当使用递归while卡时,firebase docs有点令人困惑。在测试中发现,我需要设置两个规则来授予用户写入用户文档和所有子集合(及其子文档)的权限,这是管理用户数据的最合逻辑的设置。

您必须设置两个规则。

  • 向用户授予/users/{userId} 文档
  • 的权限
  • 向用户授予所有以/users/{userId} 路径开头的子集合及其子文档的权限。
    service cloud.firestore {
    match /databases/{database}/documents {
    match /users/{userId} {
    allow read, write: if request.auth.uid == userId;
    }
    match /users/{userId}/{document=**} {
    allow read, write: if request.auth.uid == userId;
    }
    }
    }

  • Rules

    对不起,包括图像。我无法让SO正确格式化它们。

    关于firebase - Firestore安全规则中的递归通配符未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47096812/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com