有没有办法使用Firebase安全规则验证newData,如下所示?
"Event": {
"$eventId": {
"Outcome": {
".validate": "
newData.parent().parent().parent().child('Users/'+$userId+'/Events/'+$eventId+'/Opinion').exists()
"
我想要实现的是确保以原子方式进行多位置更新。
用例:如何确保单个写入包含事件的结果和每个用户的意见
目前,'$ userId'无法添加到规则中,因此上述规则无效。我希望有'*'而不是'$ userId'之类的内容,以确保'事件'的'结果'可以更新,只有当所有'用户'下的所有'意见'字段也得到更新。这可能吗?
更新:更多详细信息:更新用户数据的规则如下所示:
"Users": {
"$userId": {
"Events": {
"$eventId": {
".validate": "
newData.parent().parent().parent().parent().child('Event/'+$eventId+'/Outcome').exists()
"
}}}}
这很好用,因为唯一需要的通配符是$ eventId,它已在“.validate”之前定义。 但是,在“事件”下,没有“$ userId”,因此不能在那里使用“$ userId”通配符。
这是我进行多地点更新的方式:
var multiData = {}
multiData['Event/' + $scope.eventId + '/Outcome'] = $scope.eventOutcome;
for (var u=0; u<$scope.allUsers.length; u++) {
var curUser = allUsers[u];
multiData['Users/' + curUser.id + '/Events' + $scope.eventId + '/Opinion'] = $scope.usrOpinions[u];
}
ref.update(multiData, function(error) {
if(error) {...}
else {...}
});