我在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)"
}
}
}
}我如何添加一条规则来授予一组用户的访问权限?
发布于 2022-01-13 21:14:02
规则示例中使用的hasChild函数仅检查您指定的路径的子键。在您的例子中,路径是applications/$appId/users。
存储在applications/$appId/users上的数据是一个数组,因此数组中每个项的键将是项的索引。这就是为什么您的规则不起作用的原因--您正在检查user_id_1或user_id_2,但是数据中的键是0和1。在编写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的任何用户都能够编辑任何其他用户的权限。因为它们可以在那个位置自由地读/写所有数据。
https://stackoverflow.com/questions/70684554
复制相似问题