我的基本问题是如何设置 Firebase 规则以仅允许从其父节点访问某些叶节点?
假设我有如下所示的数据:
root: {
posts: {
post1: {
user: "foo",
post: "this is a post",
restricted: false
},
post2: {
user: "bar",
post: "this is another post",
restricted: true
},
post3: {
user: "bar",
post: "this is my final post",
restricted: false
}
}
}
我想$bind
到帖子节点并获取允许该用户获取的所有帖子。我可能希望管理员访问所有帖子,但非管理员只能访问 post1 和 post3。
注意:我使用 angularFire 的 $bind 来同步节点。
我不相信这是可能的,但我希望能够像这样设置我的规则:
{
"rules": {
"posts": {
".read": "auth.admin || $post.hasChild('restricted').val() !== true",
"$post": {
}
}
}
}
其他用户是如何实现这一目标的?谢谢。
最佳答案
您可以使用 data.hasChild
表达式来实现此目的:
{
"rules": {
"posts": {
".read": "auth.admin || data.hasChild('restricted').val() !== true"
}
}
}
但是,这不是推荐的方法,并且在实践中行不通。安全规则不太适合根据访问过滤数据 - 您将在控制台中看到权限被拒绝的错误,因为 angularFire 会尝试读取/blog 中的所有帖子,但会失败。
相反,每个用户应该知道他们有权访问哪些帖子,并且只直接获取这些帖子。您可以使用 push()
(或 angularFire 中的 $add
)生成随机帖子 ID 并设置安全规则,以便在知道帖子 ID 的情况下可以访问数据,例如。
关于security - 如何使用 Firebase 规则仅向某些叶节点授予权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038981/