【问题标题】:Locking down read/write access for a specific node based on user根据用户锁定特定节点的读/写访问权限
【发布时间】:2015-06-23 22:40:48
【问题描述】:

我知道我也遇到过类似的问题,但我仍然对如何正确保护我的 Firebase 感到有些困惑。

首先,我使用的是 EmberFire。其次,我使用 Firebase 电子邮件/密码身份验证进行帐户管理。我的每个帐户都代表一个企业。我希望当前经过身份验证的企业只能访问他/她的数据。最初,我的想法是使用以下数据结构:

+ businesses
    - uid-1
    - uid-2
    - uid-3

...其中 uid 是 Firebase 电子邮件/密码身份验证分配给用户的内容。然后我会使用以下安全规则:

{
  "rules": {
    "businesses": {
      "$user_id": {
        ".read": "$user_id === auth.uid",
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

说了这么多,有两个问题:

  1. 它会起作用吗? (很确定它将基于this post)
  2. 如果是这样,我怎样才能让 EmberFire 允许我使用我自己的 ID,而不是 push() 生成的 ID,根据文档,EmberFire 在后台使用它。

更新 关于 EmberFire,这是我用来将模型保存到 Firebase 的代码:

var business = _this.store.createRecord('business', {
    uid: userData.uid,
    businessName: _this.get('businessName'),
    firstName: _this.get('firstName'),
    lastName: _this.get('lastName')
});

business.save().then(function(success) {
    flashMessages.success('Your account has been created! Please login below.');
    _this.transitionToRoute('login');
}, function(error) {
    flashMessages.warning(error);
});

我看到的是,这些创建的对象的根节点最终成为 Firebase 生成的唯一时间戳 ID。为了解决我的问题,我想将其覆盖到 auth.uid。

提前致谢! 詹姆斯

【问题讨论】:

  • 谢谢,弗兰克。我更新了我的原始帖子以显示我用来保存到 Firebase 的 EmberFire 相关代码。如前所述,这些对象的根注释最终是由 push() 在后台生成的 Firebase ID,所以问题是:我可以覆盖它以便我可以使用 auth.uid 作为我保存的根节点吗?跨度>
  • @FrankvanPuffelen,下面的解决方案可以解决我的 EmberFire 问题,但我仍然无法使用上面的模式获得正常工作的权限。这是一个 JS bin,它说明了我正在尝试做的事情:jsbin.com/woyaculata/1/edit?html,js,console,output。再次感谢所有帮助。
  • @FrankvanPuffelen 这些问题是相关的。如果我上面提到的提议的安全规则不起作用,我不会担心需要覆盖 EmberFire 中的密钥。仅供参考,在回复您的第一个回复时,我最初确实尝试了规则,但遇到了问题,这就是我首先发布的原因。也就是说,如果您不想提供帮助,那很好 - 只是不要回复。它会比你的简短回应更好。

标签: javascript firebase firebase-security emberfire


【解决方案1】:

您可以在执行createRecord 时指定id。 id 将成为 firebase key:

var record = this.store.createRecord('business', {
  id: userData.uid,
  businessName: this.get('businessName'),
  firstName: this.get('firstName'),
  lastName: this.get('lastName')
});

您可能希望在创建用户记录之前确保它不存在,因此您需要一个“查找或创建”流程。在 Ember Data 中执行此类流程时存在一些问题。 cmets here

中概述了一个示例解决方法

【讨论】:

  • Welp,这简直太简单了。非常感谢!我会检查解决方法。再次感谢您的帮助!
  • 跟进:虽然您上面提到的 id 修复适用于 EmberFire 问题,但我在尝试使用上述安全规则向 businesses/$user_id 写入时收到 permission_denied 错误。有什么建议?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多