我希望只有当用户名从未更改时,firestore的规则才检查为真...
FirebaseAuth :如果用户是新用户,则函数会设置随机用户名。然后,用户更改此随机用户名。现在,我想要一个设置用户名“ IMMUTABLE”的规则(仅一次) 所以: 我可以在文档“ isUsernameChanged”中使用布尔标志吗?
对于每个文档,我都有一个规则“ isOwner”,这是可以的,但是我希望他不能两次更改用户名字段,而只能两次更改用户名字段,所以该文档还有其他字段,他可以随时更改更新。
我不想(我不会)更改结构,也许最好是一个新的子集合...? 还是“ isUsernameChanged”也必须加入新的(子)集合?
grazie
答案 0 :(得分:0)
这是我的解决方法
function isUsernameCambiabile(){
return (request.resource.data.username == resource.data.username || !getIfUsernameIsChanged() )
}
function getIfUsernameIsChanged(){
return exists(/databases/$(database)/documents/users/$(request.auth.uid)/isUsernameChanged/$(request.auth.uid))
}
match /users/{idUser} {
...
allow update: if (isOwner(idUser) && isUsernameCambiabile())
match /isUsernameChanged/{idUser} {
allow read: if isOwner(idUser) || isSuperAdmin();
allow create: if isOwner(idUser) || isSuperAdmin();
allow update: if false;
allow delete: if false;
}
}
当用户第一次更新其用户名时...批量在isUsernameChanged子集合上设置了具有相同uid的文档,该子集合就像一个标志!!
我可以做得更好吗?