我想写一条规则,即从网页上提交表单的人(未经身份验证的)可以.write
,只有服务器可以.read
超过两分钟的邮件。
服务器(App Engine Python-Flask实例)每两分钟轮询一次 Firebase 。但是我一直收到JSON反馈{error: Permission Denied}
,而不是我请求的数据。
安全规则如下所示:
{
"rules": {
"leads": {
".write": true,
"$user_id": {
".write": true,
".read": "auth !== null && $user_id === auth.uid && data.child('CREATED').val() > (now - 120000)"
}
}
}
}
模拟器告诉我:
Attempt to read /leads with auth={"provider":"custom","uid":"lead_checker"}
/
/leads
No .read rule allowed the operation.
Read was denied.
有人能发现我做错了什么或提供合适的替代品吗?
答案 0 :(得分:1)
如果在读取规则中有imwrite
这样的子句,它会说:当当前用户的uid与节点名称匹配时,可以读取此数据。因此,对于您的用户$user_id === auth.uid
,意味着它可以读取名为lead_checker
的节点。
您可能要做的是允许lead_checker
对每个用户节点的读取权限:
lead_checker
有了这个,潜在客户可以访问{
"rules": {
"leads": {
"$user_id": {
".write": true,
".read": "auth.uid == 'lead_checker'"
}
}
}
}
下的每个节点。请注意,它仍然无法读取leads
节点本身。如果需要,请将读取规则向上移动一级:
leads