security - 如何使用 Firebase 规则仅向某些叶节点授予权限

标签 security firebase rules angularfire

我的基本问题是如何设置 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/

相关文章:

PHP preg_replace 多条规则

从 Apriori 中删除倒置(反向/重复)规则会导致 R

javascript - 如何确保只有我自己的网站(客户端代码)可以与 Firebase 后端对话?

Android - 在一个应用程序中设置具有不同服务的多个 Firebase 项目

android - 同一 firebase 元素的多个模型类

javascript - 使用 VueFire 编辑 Firebase 数据

c# - 如何强制所有派生类实现抽象方法或属性?

security - 用于安全创建临时目录的 POSIX 函数是什么?

security - Kinesis 是否加密其静态数据?

java - 为什么这个看似等效的 SecurityManager 代码会导致虚假异常?