改进Firestore规则

时间:2018-02-05 07:17:31

标签: firebase firebase-realtime-database firebase-authentication google-cloud-firestore firebase-security-rules

我一直在尝试改进保护数据库几天的Firestore规则。我似乎只是在每次编辑时锁定所有人。我现在使用的规则是Firestore documentation中的基本规则。这是:

Users (collection) > User (document) > User specific data

但我想扩展安全性以收紧编辑规则。我的数据库如下所示:

user = FirebaseAuth.getInstance().getCurrentUser();
db = FirebaseFirestore.getInstance().collection("users");

CollectionReference colRef = db.document(user.getUid()).collection("watched");
colRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
       @Override
       public void onComplete(@NonNull Task<QuerySnapshot> task) {
          if (task.isSuccessful()) {
             ArrayList<Movie> tempItems = new ArrayList<>();
             for (DocumentSnapshot document : task.getResult()) {
                 // Handle data
             }
             } else {
                 Log.d(TAG, "Error getting documents: ",task.getException());
             }
          }
   });

我想要的是每个经过身份验证的用户都可以读取所有数据,但只有文档所属的用户(通过唯一用户ID)才能编辑/添加/删除他们的数据。

我希望你们中的一位能指出我正确的方向,因为我似乎没有从官方文件中获得任何明智。

更新:我如何在我的Android应用中集成Firestore。

ReactiveFormsModule

2 个答案:

答案 0 :(得分:1)

我明显地阅读了有关resource.data错误的文档。我必须自己添加author_id字段。我不知道这一点,但是一旦我添加它,它就像一个魅力!

答案 1 :(得分:0)

您可以编写规则以确保请求用户的uid与文档的author_id字段匹配:

service cloud.firestore {
  match /databases/{database}/documents {
    match /Users/{User} {
      allow read: if request.auth.uid != null;
      allow create, update, delete: if request.auth.uid == resource.data.author_id;
    }
  }
}