编写Firebare云存储的数据库规则

时间:2019-09-08 08:42:05

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

所以我正在Firebase中为我的数据库编写规则。而且我正试图允许某人仅删除自己的帖子。但是当我测试它时,任何人都可以删除任何人的帖子。

我尝试编写是否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();
    }}
  >

2 个答案:

答案 0 :(得分:0)

您如何发送删除请求?

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

答案 1 :(得分:0)

fun backhome(home: View) { val intent_home = Intent(this, MainActivity::class.java) startActivity(intent_home) } 操作授予权限时,这将为所有writecreateupdate操作授予权限。

您正在将粒度delete规则与非粒度writedelete规则组合在一起,我怀疑这意味着非粒度update规则会胜出(因为他们只是或在一起)。

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

write