使用安全规则拒绝Firebase权限

时间:2016-07-24 15:35:54

标签: angularjs firebase firebase-realtime-database

这是我在Firebase中的数据库中的JSON,我想做一些像auth这样的规则,但我收到错误而且我不知道该怎么做:

"users" : {
    "0BuRcGEZQRUaQ5T2gQf4RDUcuZE2" : {
      "address" : "La Prensa",
      "email" : "ougishura_5421@hotmail.com",
      "id" : "0BuRcGEZQRUaQ5T2gQf4RDUcuZE2",
      "lastName" : "Vega",
      "middleName" : "Paul",
      "name" : "Christian",
      "nroDocument" : "171645220",
      "phoneNumber" : "1234567890",
      "rol" : "administrador",
      "secondLastName" : "Niama"
    }
}

这些是我使用的规则:

{
  "rules": {
      "users": {
        "$user_id": {
          ".read": "auth != null",
          ".write": "auth.uid === $user_id"
        }
      }
   }
}

错误:

  

angular.js:13550错误:在/ users处的permission_denied:客户端无权访问所需数据。

这是我在网络应用中收到的错误。我无法看到我注册的用户。但是,当我停止使用$user_id时,它可以工作。我认为这个变量并没有得到我的价值。

代码:

resultUsers : function () { 
    var ref = pharmacyFactory.ref.child("users"); 
    var result = $firebaseArray(ref); 
    return result; 
},

1 个答案:

答案 0 :(得分:3)

问题是您使用from dateutil import tz from dateutil.parser import parse ET = tz.gettz('US/Eastern') CT = tz.gettz('US/Central') MT = tz.gettz('US/Mountain') PT = tz.gettz('US/Pacific') us_tzinfos = {'CST': CT, 'CDT': CT, 'EST': ET, 'EDT': ET, 'MST': MT, 'MDT': MT, 'PST': PT, 'PDT': PT} dt_est = parse('2014-01-02 04:00:00 EST', tzinfos=us_tzinfos) # >>> dt_est.tzinfo # tzfile('/usr/share/zoneinfo/US/Eastern') dt_pst = parse('2016-03-11 16:00:00 PST', tzinfos=us_tzinfos) # >>> dt_pst.tzinfo # tzfile('/usr/share/zoneinfo/US/Pacific') 来跟踪整个$firebaseArray(ref)分支,但是您将阅读规则放在/users内。 因此,由于您在/users/user_id中没有阅读规则,因此会设置默认值/users

如果您希望用户具有对整个false分支的读取权限,但只写入他自己的用户数据,您可能会对执行以下操作感兴趣:

/users

如果您希望用户只看到自己的用户,那么您应该使用{ "rules": { "users": { ".read": "auth != null", "$user_id": { ".write": "auth.uid === $user_id" } } } } 而不是$firebaseObject(ref.child(userId))。并按照以下规则使用您的规则:

$firebaseArray