我设置了一个回收视图,其中填充了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();
}
答案 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以获得完整的文档说明。