[英]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.