以下场景的正确 Firestore 安全规则是啥?
Posted
技术标签:
【中文标题】以下场景的正确 Firestore 安全规则是啥?【英文标题】:What is the correct Firestore security Rule for the following scenario?以下场景的正确 Firestore 安全规则是什么? 【发布时间】:2021-04-03 18:40:34 【问题描述】:我有一个这样的 Firestore 数据库
用户 用户 ID 板 boardId 董事会资料我有这样的 Firestore 安全规则设置。
rules_version = '2';
service cloud.firestore
match /databases/database/documents
match /document=**
allow read: if request.auth != null;
match /users/userId/document=**
allow read, create, update, delete: if request.auth != null && request.auth.uid == userId ;
我应该如何设置规则-
用户只能访问自己的数据。 没有人可以访问根用户集合【问题讨论】:
你目前的规则有什么问题? 有人说他们可以访问根用户集合中的所有用户。 【参考方案1】:您的规则中有一个overlapping match statement,因为您使用match /document=**
映射到数据库中的所有 文档(请参阅doc)。
所以,因为:
-
在多个允许表达式匹配一个请求的情况下,如果任何一个条件为真,则允许访问,并且
对于
match /document=**
语句,您的规则是allow read: if request.auth != null;
,那么
每个经过身份验证的用户都可以读取任何user
文档(您不会像对users
集合那样限制uid
。实际上您不能这样做,因为match /document=**
没有专门针对users
收藏)。
最好是去掉这个块,只保留下面的块。
match /users/userId/document=**
allow read, create, update, delete: if request.auth != null && request.auth.uid == userId ;
如果您需要授予对其他集合的读取权限,请为每个集合使用规则,而不是使用通配符方法。
PS:你可以仔细检查你是否真的需要做match /users/userId/document=**
,它授予访问users
文档的所有子集合的权限。你可能只需要match /users/userId
。
【讨论】:
以上是关于以下场景的正确 Firestore 安全规则是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Firestore 安全规则 - 如何检查某个字段是不是被修改?
如何检查传入号码数据是否大于或小于Firestore安全规则中的特定限制?