[英]Conditional delete from Adapter
如果我的问题听起来很愚蠢,请提前抱歉。 我是新手。 在我的应用程序中,我有一个适配器,它显示从 Firebase Firestore 查询的文档。
目前有一个 OnSwipe 侦听器可以删除文档。 我想将其设置为可以删除特定用户记录的唯一文档。 含义:用户只能删除自己写的文档,不能删除别人写的文档。 请指教如何做到这一点?
目前代码如下所示:
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
adapter.deleteItem(viewHolder.getAdapterPosition());
}
}).attachToRecyclerView(recyclerView);
您需要实施安全规则以将删除操作限制为文档的作者。 在这个文档[1]中,它提到了如何设置写入规则,其中还包含创建、更新和删除规则[2]。 因此,您可以设置如下规则:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow delete: if request.auth.uid == resource.data.userid;
}
}
}
如上所述,如果你能提供deleteitem()的内容和文档结构就更清楚了。
[1]https://firebase.google.com/docs/firestore/security/rules-query [2] https://firebase.google.com/docs/firestore/security/rules-structure#granular_operations
谢谢大家的帮助。 我确实修改了我的删除方法并且它起作用了:感谢您的提示和帮助
public void deleteItem(int position, String userID) {
String docUserID = getSnapshots().getSnapshot(position).getString("userID");
Log.i("deleteItem", "docUserID: " + docUserID + " userID: " + userID);
if (docUserID != null) {
if (docUserID.equals(userID)) {
getSnapshots().getSnapshot(position).getReference().delete();
Log.i("deleteItem", " if worked... ");
} else {
Log.i("deleteItem", " if did not work");
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.