Firebase Simulator阻止写入,当我认为它应该被我的规则允许

时间:2016-02-18 20:32:31

标签: firebase firebase-security

我正在编写一个简单的Firebase应用程序。所有逻辑现在都在运行,但我正在尝试编写一些安全规则,以至少阻止某人搞乱我的所有数据。

我不会跟踪用户或对其进行身份验证,我的应用程序可供没有登录的任何人使用。

我有这种格式的足球运动员名单:

Player
 -results
   -0
   -1
   -2
   -3

每个结果都有一个名为 MERGE INTO dbo.Tab2 AS target USING dbo.Tab1 AS source ON target.tab1_foreign_key = source.tab1_primary_key WHEN MATCHED THEN UPDATE SET target.A = source.A, target.B = source.B, target.C = source.C, target.D = source.D WHEN NOT MATCHED BY TARGET THEN INSERT (A,B,C,D,E) VALUES (source.A,source.B,source.C,source.D,source.E ); 的字段,我希望它是可写的,但是一个名为Points的字段,我不想写它。

我已实施以下规则:

Name

但是当使用模拟器将 { "rules": { ".read":true, "Player" : { "results": { "$results_id": { ".read":true, "Name":{ ".read":true, ".write":false }, "Points":{ ".read":true, ".write":true, } } } } } } 写入{ "Points" : 2}时,我收到一条错误消息:

Attempt to write {"Points":2} to /Player/results/1 with auth=null
    /
    /Player
    /Player/results
    /Player/results/1

No .write rule allowed the operation.
Write was denied.

我认为/Player/results/1是一张符合ID的通配符,显然我错了,但有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:3)

就像读取操作一样,在您阅读的级别需要读取权限,使用写入操作时,您需要在您编写的级别获得权限。

您正在执行对/Player/results/1的写入,这是不允许的。

您可以写信至/Player/results/1/Points。因此,如果您将操作更改为使用值/Player/results/1/Points2,则会允许它。