在此页面上:仅内容所有者访问有一个仅内容所有者访问安全规则的示例:
service cloud.firestore {
match /databases/{database}/documents {
// Allow only authenticated content owners access
match /some_collection/{userId}/{documents=**} {
allow read, write: if request.auth != null && request.auth.uid == userId
}
}
}
为什么我们要检查
request.auth != null
,因为它与 request.auth.uid == userId
是多余的?
从技术上讲,如果访问来自未经身份验证的客户端,
request.auth.uid == userId
将生成错误。该错误是因为 request.auth
将为 null,并且您无法访问 null 对象的属性(就像 JavaScript 一样)。该错误将导致规则立即拒绝访问(因为规则系统永远不会容忍错误)。但是,它仍然被归类为错误,并且立即拒绝可能不是您想要的,因为它会阻止其他规则评估。
对于您所展示的这个简单示例,在实践中这两种方式都没有多大关系。你会得到相同的结果。但对于更复杂的规则,您可能不希望出现错误来短路您编写的规则中其他条件的评估。
是否要写入额外条件完全由您决定。请务必测试您的规则,这样您就可以确保它们按照您期望的方式工作。