根据用户锁定特定节点的读/写访问权限



我知道有与我类似的问题,但我仍然对如何正确保护我的 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. 会起作用吗?(很确定它会基于这篇文章)
  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。

提前感谢! 詹姆斯

您可以在执行createRecord时指定idid将成为火力基础键

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

在创建用户记录之前,您可能希望确保用户记录尚不存在,因此您需要"查找或创建"流。在 Ember Data 中执行这种流程时,有一些陷阱。此处的注释中概述了一个示例解决方法

最新更新