如何将规则添加到firebase中,以允许一组用户id访问路径



我在Firebase中有一个文档的结构如下:

{
applications: {
id_1: {
feature: {
a: true,
b: false
},
users: ['user_id_1', 'user_id_2']
}
}
}

我想添加一条规则,确保只有users数组中的用户才能读写id为===id_1的应用程序。

我已经尝试添加以下规则,但当以user_id_3身份登录时,似乎仍然能够读取和写入数据

{
"rules": {
".read": "now < 1643846400000",  // 2022-2-3
".write": "now < 1643846400000",  // 2022-2-3,
"applications": {
"$appId": {
".write": "data.child('users').hasChild(auth.uid)",
".read": "data.child('users').hasChild(auth.uid)"
}
}
}
}

如何添加规则以授予对一组用户的访问权限?

您的规则示例中使用的hasChild函数仅检查您指定的路径的子级键。在您的情况下,路径为applications/$appId/users

存储在applications/$appId/users中的数据是一个数组,因此数组中每个项的键都是该项的索引。这就是为什么您的规则不起作用——您正在检查user_id_1user_id_2,但数据中的密钥是01。没有电流等效于";数组包含";编写Firebase规则时。

一个解决方案是将applications/$appId/users的数据结构更改为对象而不是数组。例如:

{
applications: {
id_1: {
feature: {
a: true,
b: false
},
users: {
user_id_1: true,
user_id_2: true
}
}
}
}

然后在规则中使用hasChild将起作用,因为用户的id是applications/$appId/users的子级。

关于您的安全性,需要注意的一点是:通过授予对所有$appId的写访问权限,您就赋予了applications/$appId/users中的任何用户编辑任何其他用户权限的能力。因为他们可以自由地读取/写入该位置的所有数据。

相关内容

  • 没有找到相关文章

最新更新