繁体   English   中英

从适配器有条件删除

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM