下面的代码工程,如果我有收集(在这种情况下供应商)
function isNotRestrictedinSuppliers(){
let value=3;
let suppliers=get(/databases/$(database)/documents/users/$(request.auth.uid)/settings/suppliers);
return suppliers.data.suppliers_array.size() < value;
//return true;
}
match /suppliers/{document=**}{
allow read,update, delete: if isSignedIn() && isValidUser();
//above is the same like allow write;
allow create: if isSignedIn() && isValidUser() && (isPremium() || isNotRestrictedinSuppliers());
}
match /suppliers/{supplier}{
allow read,update, delete: if isSignedIn() && isValidUser();
//above is the same like allow write;
allow create: if isSignedIn() && isValidUser() && (isPremium() || isNotRestrictedinSuppliers());
}
不幸的是,如果没有集合“供应商”,它就不起作用。我想做的是限制供应商的创建,但如果不存在供应商,则创建
2条答案
按热度按时间bejyjqdl1#
Firebase安全规则不允许用户创建if/else条件,因此基本上需要创建另一个函数来检查供应商文档是否存在,如果不存在则返回true
每次安全检查将额外读取一次
rjzwgtxy2#
我认为没有办法在安全规则中阅读集合。这是文档所说的:
get()和exists()函数都需要完全指定的文档路径。
但是您可以通过客户端sdk执行count documents with aggregation queries。