简单的Firebase规则

时间:2016-02-15 18:11:52

标签: angularjs json firebase angularfire

这是我在firebase上的模型:

Texts
    -KAa-aU_RjZwM7FLQcWt
         id: "5f9fe424-4323-4370-a280-9cb216dc6410"
         text: "gregegreg"
    -KAa-bZC2ouIRQ54YWWr
          id: "5f9fe424-4323-4370-a280-9cb216dc6410"
          text: "gregegreg"

这些是我的规则:

"rules": {
  "Texts": {
      ".read": "auth.id === data.child('id').val()",
      ".write": true
   }

}

不幸的是,当我使用另一个UID而不是5f9fe424-4323-4370-a280-9cb216dc6410

时,我仍然可以阅读我的所有模型文本

任何想法谢谢你!

验证部分适用于angularJs和login-password:

var firebaseObj = new Firebase("https://blinding-heat-xxxx.firebaseio.com");
            $scope.authObj = $firebaseAuth(firebaseObj);

                $scope.login = function() {

                  $scope.authData = null;
                  $scope.error = null;

                  $scope.authObj.$authWithPassword({
                        email: $scope.email,
                        password: $scope.password
                    }).then(function(authData) {
                      console.log("Logged with id:", authData.uid);

                      $scope.loadData();

                    }).catch(function(error) {
                      console.error("Auth Failed :", error);
                      $scope.error = error;
                    });
                };

最终将数据加载到网页上:

$scope.loadData = function(){
var ref = new Firebase("https://blinding-heat-xxxx.firebaseio.com"); 
$scope.Texts = $firebaseArray(ref.child('Texts'));

}

在HTML中,angularJs就在那里:

 <div ng-repeat="text in Texts">text.text</div>

真正奇怪的是,以下规则非常有效,例如:

"rules": {
  "Texts": {
      ".read": " auth != null ",
      ".write": true
   }

}

1 个答案:

答案 0 :(得分:2)

几乎就在那里!它实际上是auth.uid而非auth.id

此外,您需要提供一个通配符$变量,将该规则应用于/Texts以下的任何子级。

"rules": {
    "Texts": {
      "$text_id": {
        ".read": "auth.uid === data.child('id').val()",
        ".write": true
      }
    }
}

如果没有通配符,则规则将应用于/Texts的静态路径。

这是模拟器中的输出。

enter image description here