Javascript 基于用户锁定特定节点的读/写访问
我知道我也遇到过类似的问题,但我仍然有点困惑于如何妥善保护我的Firebase 首先,我用的是灰烬火。其次,我使用Firebase电子邮件/密码身份验证进行帐户管理。我的每个账户代表一个企业。我希望当前经过身份验证的企业只能访问其数据。最初,我的想法是使用以下数据结构:Javascript 基于用户锁定特定节点的读/写访问,javascript,firebase,firebase-security,emberfire,Javascript,Firebase,Firebase Security,Emberfire,我知道我也遇到过类似的问题,但我仍然有点困惑于如何妥善保护我的Firebase 首先,我用的是灰烬火。其次,我使用Firebase电子邮件/密码身份验证进行帐户管理。我的每个账户代表一个企业。我希望当前经过身份验证的企业只能访问其数据。最初,我的想法是使用以下数据结构: + businesses - uid-1 - uid-2 - uid-3 …其中uid是通过Firebase电子邮件/密码身份验证分配给用户的内容。然后,我将使用以下安全规则: { "rules":
+ businesses
- uid-1
- uid-2
- uid-3
…其中uid是通过Firebase电子邮件/密码身份验证分配给用户的内容。然后,我将使用以下安全规则:
{
"rules": {
"businesses": {
"$user_id": {
".read": "$user_id === auth.uid",
".write": "$user_id === auth.uid"
}
}
}
}
综上所述,有两个问题:
push()
生成的id,根据文档,EmberFire在引擎盖下使用该idvar 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
提前谢谢!
James您可以在执行
createRecord
时指定id
。id
将成为firebase键:
var record = this.store.createRecord('business', {
id: userData.uid,
businessName: this.get('businessName'),
firstName: this.get('firstName'),
lastName: this.get('lastName')
});
在创建用户记录之前,您可能需要确保它不存在,因此您需要一个“查找或创建”流。在余烬数据中执行这种流时存在一些问题。评论中概述了一个解决方法示例谢谢,弗兰克。我更新了我原来的帖子,显示了我用来保存到Firebase的与灰烬火相关的代码。如前所述,这些对象的根注释最终是由引擎盖下的
push()
生成的Firebase ID,因此问题是:我是否可以覆盖它,以便使用auth.uid作为我保存内容的根节点?@FrankvanPuffelen,下面的解决方案解决了我的余火问题,但我仍然无法获得使用上述模式正常工作的许可。下面是一个JS bin,它说明了我正在尝试做的事情:。再次感谢所有的帮助。@FrankvanPuffelen这些问题是相关的。如果我上面提到的提议的安全规则不起作用,我不会担心需要在EmberFire中重写密钥。仅供参考,作为对您第一次回复的回应,我最初确实尝试了这些规则,但遇到了问题,这就是为什么我首先发布这些规则的原因。也就是说,如果你不想帮忙,那没关系,只是不要回答。这比你的冷嘲热讽的回答要好。嗯,那太简单了。非常感谢你!我会检查一下解决方法。再次感谢你的帮助!跟进:虽然您上面提到的id
修复程序对EmberFire问题有效,但我在尝试使用上面提到的安全规则写入business/$user\u id
时遇到了permission\u denied
错误。有什么建议吗?谢谢