1

在似乎将我的头撞到墙上之后似乎是一个简单的问题,我认为最好寻求一些帮助。

我正在创建一个允许用户使用简单登录进行身份验证的 EmberFire 应用程序。一旦通过身份验证,用户就可以存储特定项目以供以后检索。

我有这样定义的模型:

用户:

export default DS.Model.extend({
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  dateOfBirth: DS.attr('date'),
  registeredAt: DS.attr('date'),
  compentencies: DS.hasMany('competency', { async: true })
});

能力:

export default DS.Model.extend({
  title: DS.attr('string'),
  endDate: DS.attr('date'),
  user: DS.belongsTo('user', { async: true })
});

这些以非规范化的形式存储在 firebase db 中,就像我希望的那样。

在此处输入图像描述 我的问题出现在检索持久数据时。我不确定我应该如何将能力锁定到特定用户?

FireBase 中规则级联的方式我不确定这种形式是否可能,但我必须将每个能力存储在每个用户节点下的嵌入式表单中似乎是不对的。

我知道我可以只允许使用 this.store.find('competency') 读取所有“能力”模型,然后在客户端上过滤它们,但这不符合我期望的安全性。

任何帮助都会非常感谢。

瑞安

4

1 回答 1

2

如果能力属于当前登录的用户,则仅允许对能力的读取访问权限,您可以使用$competencyId(您可以将“competencyId”替换为任何有效字符串)。使用$competencyId限制对特定节点competencies/的访问,而不是允许访问整个树。

"rules": {
  "competencies": {
    "$competencyId": {
      ".read": "data.child('user').val() === auth.uid"
    }
  }
}
于 2016-03-01T19:16:01.237 回答