Firebase规则,仅限制对参与用户的访问

时间:2017-10-06 00:47:52

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

尝试实施,以便用户只能访问用户正在玩的游戏的游戏数据。 基本上,如果用户是玩家列表的一部分,则用户应该能够阅读。我有一个所有$ GameID中参与玩家的列表。 所有用户都有自己唯一的用户名存储在用户下 - > FirebaseID - >用户名值。

我可以在模拟读取$ GameID中的孩子时使用以下内容,其中用户是其中的一部分,但是当我在我的应用程序中尝试使用它时,它不会让用户访问。

在app中调用:

In []:
a = np.array([e for i in timebucket for e in i.items()]); 
a[a[:,1].argsort()][:2].mean(axis=0)

Out[]
array([ 0.99084129,  0.00261179])

规则:

GamesDataDatabase = FirebaseDatabase.getInstance().getReference("Games");
GamesDataDatabase.limitToFirst(50).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ......

如果我更换"数据"似乎没有任何区别与root.child(' Games')。child($ GameID)

数据结构: Data tree

来回试验但似乎无法使这条规则有效...... :(

1 个答案:

答案 0 :(得分:1)

问题从这里开始代码:

3h 35m

此代码仅在用户具有GamesDataDatabase = FirebaseDatabase.getInstance().getReference("Games"); GamesDataDatabase.limitToFirst(50).addListenerForSingleValueEvent(... 的读取权限时才有效。如果他们没有/Games的读取权限,则会因“拒绝权限”而失败。

将此与您无法在较低级别取消权限的事实相结合,这意味着您无法使用Firebase安全规则来过滤数据。

这称为"rules are not filters" in the Firebase documentation,对于不熟悉Firebase安全模型的开发人员来说,这是一个常见的混淆源。我建议您学习一些previous questions and answers以了解更多信息。