我需要有关Firebase读取规则的帮助。
这是我数据库的结构
db:{
user:{
uid0:{
name:"mario",
lastname:"super"
}
uid1:{
name:"bubu",
lastname:"gogo"
}
uid1:{
name:"fajio",
lastname:"mkokd"
}
}
}
我的规则:
{
"rules": {
"user":{
"$uid":{
".read":"auth.uid === $uid",
}
}
}
}
使用规则模拟器,读取用户信息没有问题。
在我的活动中,我使用了具有用户名称的填充列表的回收站视图 我得到权限被拒绝。
问题是什么?怎么了?
这是我对填充列表的查询
Query query = FirebaseDatabase.getInstance().getReference().child("user");
编辑:
`10-28 17:28:22.680 8317-8387/com.scidaconnectpeople.www.scida W/SyncTree: Listen at /user failed: DatabaseError: Permission denied
10-28 17:28:22.680 8317-8317/com.scidaconnectpeople.www.scida W/FirebaseRecyclerAdapter: com.google.firebase.database.DatabaseException: Firebase Database error: Permission denied
at com.google.firebase.database.DatabaseError.toException(Unknown Source)
at com.firebase.ui.database.FirebaseRecyclerAdapter.onCancelled(FirebaseRecyclerAda pter.java:199)
at com.firebase.ui.database.FirebaseRecyclerAdapter$1.onCancelled(FirebaseRecyclerAdapter.java:116)
at com.firebase.ui.database.FirebaseArray.notifyCancelledListeners(FirebaseArray.java:119)
at com.firebase.ui.database.FirebaseArray.onCancelled(FirebaseArray.java:99)
at com.google.android.gms.internal.zzaip.zza(Unknown Source)
at com.google.android.gms.internal.zzakn.zzcxi(Unknown Source)
at com.google.android.gms.internal.zzaks$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5538)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:958)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:753)`
答案 0 :(得分:0)
答案 1 :(得分:0)
Firebase数据库安全规则在您尝试附加查询的级别强制执行。由于您在/users
上附加了查询,因此它会检查您是否具有读取权限。由于您没有/users
的读取权限,因此会拒绝/取消查询。
对于Firebase新手来说,这通常是出乎意料的。我们将其称为“规则不是过滤器”,in the documentation和here on Stack Overflow。