Firebase多地点更新 - 安全规则

时间:2016-10-05 11:03:35

标签: javascript firebase firebase-realtime-database firebase-security

有没有办法使用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 {...}
});

0 个答案:

没有答案