2016-07-24 54 views
1

这是从火力地堡我的数据库中的JSON,我想去做的权威性一些规则,但我得到一个错误,我不知道该怎么做:火力地堡权限被拒绝安全规则

"users" : { 
    "0BuRcGEZQRUaQ5T2gQf4RDUcuZE2" : { 
     "address" : "La Prensa", 
     "email" : "[email protected]", 
     "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 Error: permission_denied at /users: Client doesn't have permission to access the desired data.

这是我在我的web应用程序出现错误。我看不到已注册的用户。但是当我停止使用$user_id它的作品。我认为这个变量没有得到我的价值。

代码:

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

在您的问题中没有任何内容会读取或写入数据,因此没有任何内容可以引发权限拒绝错误。没有看到再现错误的最小代码,它将很难回答。 –

+0

angular.js:13550错误:/ users处的permission_denied:客户端无权访问所需的数据。 这是我在我的网络应用程序中得到的错误,我不能看到我已注册的用户,但是当我停止使用$ user_id时,它的工作原理我认为该变量没有得到我的值 –

+0

@StevenSparkies请添加您的代码用来检索用户数据。 – adolfosrs

回答

2

的问题是,你正在使用$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。并使用您的规则,如下所示:

{ 
    "rules": { 
     "users": { 
     "$user_id": { 
      ".read": "auth.uid === $user_id", 
      ".write": "auth.uid === $user_id" 
     } 
     } 
    } 
} 
+0

谢谢,工作完美....但我能做什么,如果我只是想让用户只看到他自己的用户不是其他人 –

+0

@StevenSparkies刚刚更新了答案:) – adolfosrs