此文档页面:Writing conditions for Cloud Firestore Security Rules,内容如下:
另一个常见的模式是确保用户只能读写自己的数据
并提供以下示例:
service cloud.firestore {
match /databases/{database}/documents {
// Make sure the uid of the requesting user matches name of the user
// document. The wildcard expression {userId} makes the userId variable
// available in rules.
match /users/{userId} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
我不明白为什么create
规则的定义条件与其余if request.auth.uid == userId
的条件不同,而是用if request.auth.uid != null
定义的。据我了解,使用此规则,任何用户都可以在users
内创建任何文档,但是除非它与自己的uid相匹配,否则不能对其进行任何操作。那么为什么要允许它呢?
答案 0 :(得分:0)
让我们谈一谈可以通过用户身份验证实施的非常基本安全规则:
allow read, update, delete: if request.auth.uid != null;
allow create: if request.auth.uid != null;
,任何用户都可以删除其他人创建的文档。因此,为了对其进行限制/控制,我们按照提供的代码段所示实现。
service cloud.firestore {
match /databases/{database}/documents {
// Make sure the uid of the requesting user matches name of the user
// document. The wildcard expression {userId} makes the userId variable
// available in rules.
match /users/{userId} {
allow read, update, delete: if request.auth.uid == userId;
allow create: if request.auth.uid != null;
}
}
}
代码段只是一个示例使用案例,出于参考目的使用了不同的条件,因为这是一个教程/指南,因此Firebase团队尝试使尽可能多的条件适合代码段。
您当然可以执行allow create: if request.auth.uid == userId;
,以严格限制该特定用户使用。
我希望它能给您一些想法!