假设你有一个firebase数据库,其中包含要在webapp中显示的新闻文章。在顶层,我们使用Firebase身份验证来确保用户首先可以访问新闻文章。
但是不同的人可以看到不同的文章(新闻数据库中的项目)。例如,我应该将用户放在一个名为" management"有权访问其他用户无法查看的文章。
如何使用Firebase实现这一目标? (Web的版本)
示例数据库:
{
"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"
}
} }
所以问题不在于如何限制用户访问整个" newsfeed",而是如何在项目级别单独编辑访问权限。在上面的示例中,所有用户都可以阅读项目1002,而只有被标记为组成员的用户才能阅读项目1002和管理"和/或" Group11"应该能够阅读项目1001。
动态规则是否可以实现?如果我必须为每个项目创建一个新规则,那么规则的数量是否有限制?
答案 0 :(得分:1)
如果您还没有,我会阅读Security Quickstart指南。它很好地解释了Firebase安全规则的工作原理。
如果您遇到问题,我建议您提供一个组列表,其中每个组都有该组中用户的uid。例如:
{
"groups" : {
"Group11" : {
"<uid1>": true,
"<uid2>": true
},
"Management" : {
"<uid1>": true,
"<uid2>": true
}
}
}
如果用户是某个组的成员,请将他们的uid添加到该组的成员列表中。然后在您的规则中,您可以.read
检查尝试读取数据的用户是否在任何允许的组中使用了他们的uid。