allow list: if request.query.limit <= 15;
当与复合查询一起使用时,此规则会被忽略。
firestore().collection('orders').where('customerId', '==', uid)
.where('orderStatusCode', 'in', [1, 2, 3])
.limit(100)
.get()....
安全规则:
match /orders/{order} {
allow list: if request.query.limit <= 15;
allow read: if request.auth.uid == resource.data.customerId;
allow create: if request.auth != null;
allow update: if request.auth.uid == resource.data.customerId;
allow delete: if false;
}
答案 0 :(得分:1)
如果任何安全规则允许操作,Firestore 安全规则将允许操作。
在您的情况下,您在列表规则之后的行中允许 read
访问。 read
是 get
和 list
的组合。 get
用于文档特定查询,而 list
用于对集合进行查询。即使 list
规则被拒绝,read
规则仍在通过,因此您的查询正在获取数据。
您可以像这样更新您的安全规则以使其正常工作:
match /orders/{order} {
allow list: if request.query.limit <= 15;
allow get: if request.auth.uid == resource.data.customerId;
allow create: if request.auth != null;
allow update: if request.auth.uid == resource.data.customerId;
allow delete: if false;
}
或者,如果您希望在 auth.uid == customerId
处向用户提供数据,可以是这样:
match /orders/{order} {
allow list: if request.query.limit <= 15
&& request.auth.uid == resource.data.customerId;
allow get: if request.auth.uid == resource.data.customerId;
allow create: if request.auth != null;
allow update: if request.auth.uid == resource.data.customerId;
allow delete: if false;
}