【发布时间】:2018-07-02 21:31:01
【问题描述】:
我正在尝试确保我的数据库安全,我的场景数据如下所示:
receipts: [
{
userId: id,
...
},
{
userId: id,
...
},
...
]
每张收据都有userId 字段,其中包含有关其创建者的信息。我想返回特定用户的收据列表。为此,我进行了如下所示的 REST 调用:
https://[PROJ_NAME].firebaseio.com/receipts.json?orderBy="userId"&equalTo="[USER_ID]"&auth=[TOKEN]
并且在所有设置为打开的规则上,它都非常有效。但我想保护我的数据库,这样其他用户就无法通过更改 URL 来查看所有资源。
在 firebase 文档中,我发现了这样的 sn-p:
"baskets": {
".read": "auth.uid != null &&
query.orderByChild == 'owner' &&
query.equalTo == auth.uid" // restrict basket access to owner of basket
}
这似乎是合理的,所以我将它应用到我的配置中,但现在它总是失败。这是我的文件的样子:
{
"rules": {
"receipts": {
".indexOn": ["userId"],
".read": "auth.uid != null &&
query.orderByChild == 'userId' &&
query.equalTo == auth.uid"
}
}
}
不幸的是,它总是返回"error" : "Permission denied"。因为那件事我已经失去了一整天:(
谁能帮帮我?
【问题讨论】:
-
您是否尝试过引用
equalTo的值?例如equalTo="[USERID]" -
是的,引用和
orderBy="userId"一样。 -
我在security rules documentation 中没有找到关于
query变量的任何内容。我认为您的规则中使用query的条款无效。您能否发布指向您发现在规则中使用query的文档或示例的链接? -
@BobSnyder:firebase.google.com/docs/database/security/…我什至不知道这已经发布了,所以需要一点时间来赶上......并可能更新几百个问题来解释“规则现在可以用于过滤数据,如果您确保查询和规则一致”。
-
根据我使用 Android SDK 完成的测试,我同意
equalTo似乎已损坏。
标签: rest firebase firebase-realtime-database firebase-security