我一直在尝试改进保护数据库几天的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
答案 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;
}
}
}