想象一下,如果我想请求两个用户ID(user1和user2(进行聊天(文档(。
聊天文档包含一个带有参与者ID的数组,因此users1和users2都在参与者数组中。
如果我请求participant数组中包含user1或user2的所有内容,我可能也会获得user1与其他用户的聊天,而不仅仅是user1与user2的聊天。
示例代码:
ref.where('participantsIds', 'array-contains-any', [u1.id , u2.id])
现在想象一下,我添加了一个安全规则,只有当发出请求的用户在参与者数组中时,才允许进行聊天。
例如:
allow read, write: if request.auth!=null && request.auth.uid in resource.data.participantsId
这是一种糟糕的做法吗?我可以使用规则来控制应用程序的每个实例的数据行为吗
无论结果是真是假,规则都可能会给请求增加几毫秒(甚至不是?(。
是的,我知道这会影响成本和申请配额。
谢谢!!
Firebase安全规则不是过滤器。他们无法更改将从查询返回的数据。他们所做的只是阻止人们根据你提供的逻辑访问数据。
如果应用上面显示的规则,那么用户请求其uid不在participantsId
中的任何文档的任何查询,或者用户在participantsId
上进行的查询不使用其uid作为必需的筛选器,那么查询将失败。这是你应该很容易就能自己观察到的东西。
我建议阅读:Firestore安全规则不是过滤器意味着什么?