如何允许用户从Firebase删除其帖子?

时间:2019-08-02 17:59:23

标签: android firebase

我设置了一个回收视图,其中填充了Firebase中用户的帖子。我想实现一个功能,允许用户删除自己的帖子(类似于Facebook或Instagram)。到目前为止,我已经编写了一些允许删除帖子的代码,但是任何用户都可以删除它。

//This is how my database is set up 
 Post
 -LlISwmjd0pBXzkNHJGW (random push id)
 desc: "Used textbook"
 id:   "Zk32WqxcCHbR1op6j9inFudFJF23"
 image: "image link"
 name:    "user name"
 profileimage: "profile image"




//This method allows a post to be removed
  //Creates popup and allows user to delete from RecycleView
    public void openOptionMenu(View v, final int position) {
        PopupMenu popup = new PopupMenu(v.getContext(), v);
        popup.getMenuInflater().inflate(R.menu.options_menu, popup.getMenu());
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.menu1:
                        Toast.makeText(getApplicationContext(), "Edit clicked", Toast.LENGTH_SHORT).show();
                        return true;
                    case R.id.menu2:
                        FirebaseDatabase.getInstance().getReference().child("Post").child(randomPostKeyId).removeValue();
                        postList.remove(position);
                        adapter.notifyDataSetChanged();
                        return true;
                    default:
                        //default intent
                        return true;
                }
            }
        });
        popup.show();
    }

2 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您的问题。据我了解,如果该帖子是由用户互动创建的,则您希望显示该帖子的删除选项。

如果是这种情况,请在“ openOptionMenu”方法中添加检查以查看post.name == currentUser.name。如果是,请继续您现在所做的一切。否则会为新的选项菜单充气,而删除选项不存在。

答案 1 :(得分:0)

您可以设置Firebase安全规则,以便只有所有者才能修改/删除帖子。 假设每个帖子都有一个属性,其中包含创建该帖子的用户的用户ID,如果键的名称为 ownerId ,则其外观如下:

{
// Allow anyone to read data, but only authenticated content owners can
// make changes to their data

  "rules": {
    "Post": {
      "${postId}": {
        ".read": true,
        // or ".read": "auth.uid != null" for only authenticated users
        ".write": "root.child('Post').child(postId).child('ownerId').val() == auth.uid"
      }
    }
  }
}

检出https://firebase.google.com/docs/rules以获得完整的文档说明。