首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向火基中添加规则,使一组用户ids能够访问路径?

如何向火基中添加规则,使一组用户ids能够访问路径?
EN

Stack Overflow用户
提问于 2022-01-12 15:55:21
回答 1查看 92关注 0票数 1

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

代码语言:javascript
复制
{
  applications: {
    id_1: {
      feature: {
        a: true,
        b: false
      },
      users: ['user_id_1', 'user_id_2']
    }
  }
}

我希望添加一个规则,以确保只有users数组中的用户可以使用id === id_1对应用程序进行读写。

我尝试过添加以下规则,但在以user_id_3身份登录时似乎仍然能够读写数据

代码语言:javascript
复制
{
  "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)"
      }
    }
  }
}

我如何添加一条规则来授予一组用户的访问权限?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-13 21:14:02

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

存储在applications/$appId/users上的数据是一个数组,因此数组中每个项的键将是项的索引。这就是为什么您的规则不起作用的原因--您正在检查user_id_1user_id_2,但是数据中的键是01。在编写Firebase规则时,没有“数组包含”的当前等效值。

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

代码语言:javascript
复制
{
  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的任何用户都能够编辑任何其他用户的权限。因为它们可以在那个位置自由地读/写所有数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70684554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档