我试图添加一个规则,自动合并两个用户,如果用户已经存在相同的电子邮件,只是保持其中一个新用户的最新数据。
match /users/{userId} {
allow create: if request.resource.data.email != null;
allow update: if request.resource.data.email != null && request.auth.uid == userId;
function isDuplicateEmail() {
return get(/databases/$(database)/documents/users/$(request.resource.data.email)).exists;
}
function mergeUsers(userId) {
// Get the data of the new user
let newUser = get(/databases/$(database)/documents/users/$(userId)).data;
// Get the data of the existing user
let existingUser = get(/databases/$(database)/documents/users/$(newUser.email)).data;
// Merge the data from the two users
let mergedData = {...existingUser, ...newUser};
// Update the data of the existing user
return update(/databases/$(database)/documents/users/$(newUser.email), mergedData);
}
allow create: if !isDuplicateEmail()
allow create: if isDuplicateEmail() && mergeUsers(userId);
}
但我在规则编辑器中看到一个错误:“意外的“}"。第40行:
let mergedData = {...existingUser, ...newUser};
我错过了什么?谢谢。
2条答案
按热度按时间huwehgph1#
安全规则表达式语言不像JavaScript那样支持
...
spread运算符。事实上,它根本不是JavaScript--它只是看起来有点像JS。您可能想在documentation中阅读有关它的语法。除此之外,没有名为
update
的函数。你根本不能修改安全规则中的数据。你只能检查是否允许或拒绝传入的访问。如果你想修改文档数据,你必须为此编写应用程序或后端代码。cclgggtu2#
}
正在使用mergeUsers()
函数的allow create
语句之前关闭match语句。请尝试:此外,如果您打算使用
update
函数,还需要包含一个允许更新发生的规则。