首页 文章

使用Firebase对项目级别进行访问控制[重复]

提问于
浏览
1

这个问题在这里已有答案:

假设你有一个firebase数据库,其中包含要在webapp中显示的新闻文章 . 在顶层,我们使用Firebase身份验证来确保用户首先可以访问新闻文章 .

但是不同的人可以看到不同的文章(新闻数据库中的项目) . 例如,我放入名为“management”的组中的用户是否有权查看其他用户无法查看的某些文章 .

如何使用Firebase实现这一目标? (网络版)

示例数据库:

{
  "newsfeed" : {
"1001" : {
  "body" : "Lots of text here for the body of the article.",
  "header" : "This is an open article",
  "leadParagraph" : "With a lead paragraph and lots of content",
  "permissions" : {
    "All" : false,
    "Group11" : true,
    "Management" : true
  }
},
"1002" : {
  "Permissions" : {
    "All" : true
  },
  "body" : "Content here",
  "header" : "Testarticle for everyone",
  "leadParagraph" : "Everyone can read this one"
}

}}

所以问题不在于如何限制用户访问整个“新闻源”,而是如何在项目级别单独编辑访问权限 . 在上面的示例中,所有用户都可以阅读项目1002,而仅被标记为组“管理”和/或“组11”的成员的用户应该能够阅读项目1001 .

动态规则是否可以实现这一点?如果我必须为每个项目创建一个新规则,那么规则的数量是否有限制?

1 回答

  • 1

    如果您还没有,我会阅读Security Quickstart指南 . 它很好地解释了Firebase安全规则的工作原理 .

    如果您遇到问题,我建议您提供一个组列表,其中每个组都有该组中用户的uid . 例如:

    {
      "groups" : {
        "Group11" : {
          "<uid1>": true,
          "<uid2>": true
        },
        "Management" : {
          "<uid1>": true,
          "<uid2>": true
        }
      }
    }
    

    如果用户是组的成员,请将他们的uid添加到组的成员列表中 . 然后在您的规则中,您可以使 .read 检查尝试读取数据的用户是否在任何允许的组中使用了他们的uid .

相关问题