阅读了一些文章,以了解Firebase中的规则和权限,然后遇到了类似于write操作的情况:
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}我的理解是,$uid代表用户推送ID,它适用于为Users节点生成的所有动态ID。
然后看到这条规则是:
{
"rules": {
"articles": {
"$article": {
"title": {
".write": "auth != null",
".validate": "newData.isString() && newData.val() != ''"
}
}
}
}
}如果$article代表articles节点的Push ID,那么users节点的Push ID也应该是$user。难到不是么?在配置规则时,声明Push ID的标准命名约定是什么,以便Firebase解析/正确理解它们。
最后,auth.uid代表什么?
发布于 2016-10-06 10:55:40
让我们从auth.uid开始,它代表通过身份验证的用户的uid。接下来是$user和$article,这些通配符路径使得它们可以成为任何东西,而不仅仅是推送id。查看医生们获取更多信息。
在您的第一个示例中,$uid是用户id的通配符。使用写规则,您可以检查身份验证的用户只能写入自己的位置,因此它将是这样的(为了清晰起见,使用名称而不是uid):
"users" : {
"Henk": {//Only Henk can write here
},
"John": {//Only John can write here
}
}至于通配符路径的命名,据我所知,没有约定。就我个人而言,我使用描述性的名字,所以我知道它是什么。在使用用户uid作为路径时,始终使用$uid,对于其他用户,类似于对象id的$objectID。(这些可以是推送生成的或者是自制的)
至于其余部分,我建议您花一些时间阅读所有的关于安全规则的文档。
https://stackoverflow.com/questions/39889940
复制相似问题