代码之家  ›  专栏  ›  技术社区  ›  jonasxd360

firestore:让用户只更新、删除自己的数据

  •  2
  • jonasxd360  · 技术社区  · 6 年前

    以下是我当前的安全规则:

    service cloud.firestore {
      match /databases/{database}/documents {
      match /tournaments/{tournament=**} {
        allow update, delete: if request.auth.uid == resource.data.author;
        allow create: if request.auth.uid != null;
        allow read: if true;
      }
      }
    }
    

    一切正常,只有更新或删除不起作用,原因是“权限丢失或不足”

    这是我的密码

                mDocRef
                    .update(key, score)
                    .addOnSuccessListener(new OnSuccessListener<Void>() {
                        @Override
                        public void onSuccess(Void aVoid) {
                            Log.d(TAG, "DocumentSnapshot successfully updated!");
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.w(TAG, "Error updating document", e);
                        }
                    });
    

    mdocref指路径为“tournaments/tournamentid/acollection/a document”的文档

    下面是创建mdocref的代码:

                mTournamentDocRef = mTournamentColRef.document();
                mDocRef = mTournamentDocRef.collection("aCollection").document();
    

    需要注意的是:

    • 用户在整个过程中通过火箭炮签到
    • 我尝试使用.where(“author”,“=”,user.uid),但出现“无法解析方法”错误

    谢谢你的帮助!

    2 回复  |  直到 6 年前
        1
  •  0
  •   jonasxd360    6 年前

    我将firebase用户的id添加到为获得所需结果而创建的每个文档中

     tournamentData.put("author", user.getUid());
     data.put("author", user.getUid());
    
        2
  •  0
  •   Jaime Rios    6 年前

    我查过文件了,这些是你要找的规则:

    match /users/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
    

    文档链接作为参考: https://firebase.google.com/docs/firestore/security/rules-conditions?authuser=0