【问题标题】:Firestore permissionsFirestore 权限
【发布时间】:2017-11-24 11:20:29
【问题描述】:

如何配置权限以使用户只能在其所有者所在的位置读取和写入文档? 我的文档有一个名为 owner 的顶级属性。

我阅读了这些文档
https://firebase.google.com/docs/firestore/security/secure-data?authuser=0#the_resource_variable

看来这应该可行?

service cloud.firestore {
  match /databases/{database}/documents {
    match /analysis/{analysis} {
      allow read, write: if request.auth.email == resource.data.owner
    }
  }
}

但这似乎不起作用。我不断收到权限不足错误。 我需要改变什么?


更新:

阅读@Doug Stevenson 链接的文档后,我决定选择

service cloud.firestore {
  match /databases/{database}/documents {
    match /analysis/{analysis} {
      allow read, write: if request.auth.uid == resource.data.owner_uid;
    }
  }
}

所以我的初衷是,当我们进行列表操作时:

a. 仅返回属于用户的文档
b. 只有用户拥有的文档才能被该用户读取或写入。

通过以上配置b.就完成了。
我该如何完成a.?

【问题讨论】:

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


    【解决方案1】:

    根据documentation,您应该使用request.auth.token.email(而不是request.auth.email)。

    【讨论】:

    • 好收获!那里的token 每次都把我弄得一团糟。 :-/
    • 谢谢@doug stevenson。我已经更新了我上面的问题。如果您认为它更适合新问题,请告诉我。
    【解决方案2】:

    回答您的更新问题第 (a) 部分:

    我有一个类似的问题 - 我正确设置了规则以允许该用户读写。但是,Firestore 需要我们让我们的查询匹配 firestore 数据库规则。因此,前面的查询应该与该用户有权访问的内容相匹配。所以我的问题是我要求收藏中的所有产品。我需要将其更改为要求产品“所有者”与登录用户匹配的集合中的所有产品,如下所示:

    db.collection('products').where('owner', '==', firebase.auth().currentUser.uid).get()
    

    希望对你有帮助

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多