firebase 不存在文档的Firestore规则

llmtgqce  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(278)

下面的代码工程,如果我有收集(在这种情况下供应商)

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());  
}

不幸的是,如果没有集合“供应商”,它就不起作用。我想做的是限制供应商的创建,但如果不存在供应商,则创建

bejyjqdl

bejyjqdl1#

Firebase安全规则不允许用户创建if/else条件,因此基本上需要创建另一个函数来检查供应商文档是否存在,如果不存在则返回true

function notExists(){
  let suppliers=exists(/databases/$(database)/documents/users/$(request.auth.uid)/settings/suppliers);
  return !suppliers
}

每次安全检查将额外读取一次

rjzwgtxy

rjzwgtxy2#

我认为没有办法在安全规则中阅读集合。这是文档所说的:
get()和exists()函数都需要完全指定的文档路径。
但是您可以通过客户端sdk执行count documents with aggregation queries

相关问题