繁体   English   中英

在 Firestore 中更新文档时阻止用户添加不同的字段?

[英]Preventing a user from adding a different fields when updating a document in firestore?

我试图阻止用户在文档中创建垃圾邮件字段,这些字段不同于原始文档的 state(创建后)我当前的规则如下所示:

//Create
allow create : if request.auth != null  
&& request.auth.uid == userId
&& request.resource.data.keys().hasOnly(
  ['clients', 'verifiedEmail', 'accountStatus' ,'createdAt', 'endsAt'])
 
allow read: if request.auth != null && request.auth.uid == userId          

allow update : if request.auth.uid == userId 
&& request.auth.uid == userId
&& request.resource.data.keys().hasAny(
 ['clients', 'verifiedEmail', 'accountStatus' ,'createdAt', 'endsAt']])

这里的想法是在一个实例中我想更新客户端

  await updateDoc(doc(db, 'Data', userCredential.user.uid), {
    clients: //data,
  });

在其他情况下,我想更新经过验证的 Email。同时防止用户创建类似的文件

await updateDoc(doc(db, 'Data', userCredential.user.uid), {
    shouldnotbecreated: //some spam,
});

在规则更新块中

如果我使用hasOnly()它是如此严格以至于它需要整个有效负载是相同的。 ['clients', 'verifiedEmail', 'accountStatus','createdAt', 'endsAt']

如果我使用hasAll()hasAny() ),则会创建一个垃圾邮件归档。

它通过结合使用 request.resource.data.diff(resource.data).affectedKeys().hasOnly() 为我工作

 //Create allow create: if request.auth.= null && request.auth.uid == userId && request.resource.data.keys(),hasOnly( ['clients', 'verifiedEmail', 'accountStatus','createdAt': 'endsAt']) allow read. if request.auth.= null && request:auth.uid == userId allow update. if request.auth.uid == userId && request.auth.uid == userId && request.resource.data.diff(resource.data),affectedKeys(),hasOnly( ['clients', 'verifiedEmail', 'accountStatus' ,'createdAt', 'endsAt']])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM