【问题标题】:Writing Database rules for Firebare cloud storage为 Firebare 云存储编写数据库规则
【发布时间】:2019-09-08 08:42:05
【问题描述】:

所以我在 firebase 中为我的数据库编写规则。我试图让一个人只删除他自己的帖子。但是当我测试它时,任何人都可以删除任何人的帖子。

我试过写 if request.auth.uid==resource.data.User.uid 但它不起作用

 rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId}{
        allow delete: if request.auth.uid==resource.data.User.uid
        allow read;
        allow write,update: if request.auth.uid!=null; 
    }
  }
}

我尝试通过将其更改为进一步简化它

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /posts/{postId}{
        allow delete: if request.auth.uid==1
        allow read;
      allow write,update: if request.auth.uid!=null; 
    }
  }
}

但仍然任何人都可以删除任何人的帖子。显然没有人将 uid 设为 1。

这是我的帖子集

Content "Hello"
Title "Hey"
User
  displayName "Vikram Singh Bedi"
  email "vikrambedi_bt2k16@dtu.ac.in"
  uid "dCQvboYvffQ1kOqkMqgs2txNKvo1"
comments 0
createdAt 8 September 2019 at 14:10:31 UTC+5:30
favorites 0 

我希望只有创建帖子的人能够删除它。

这是删除帖子的代码

  <button
    className="delete"
    onClick={() => {
      firestore.doc(`posts/${id}`).delete();
    }}
  >

【问题讨论】:

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


【解决方案1】:

如何发送删除请求?

例如,如果您使用Admin SDK 删除,则Admin SDK 将绕过规则。

【讨论】:

    【解决方案2】:

    当您授予 write 操作的权限时,即授予所有 createupdatedelete 操作的权限。

    您将细化 write 规则与非细化 deleteupdate 规则组合在一起,我怀疑这意味着非细化 write 规则胜出(因为它们只是 OR'ed 在一起)。

    如果是这种情况,请仅使用非粒度写入规则:

    allow delete: if request.auth.uid==resource.data.User.uid
    allow read;
    allow create,update: if request.auth.uid!=null; 
    

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 2018-08-27
      • 1970-01-01
      • 2018-05-29
      • 2021-06-25
      • 2011-05-22
      • 2020-12-28
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多