当前位置:  开发笔记 > 编程语言 > 正文

Firebase安全规则Emberfire每个节点的多个访问级别

如何解决《Firebase安全规则Emberfire每个节点的多个访问级别》经验,为你挑选了0个好方法。

我有两个Ember型号:a itemscomments.用户将发布项目,其他用户将能够对项目发表评论.

我无法在firebase中设置允许namedescription仅由当前用户写入的安全规则,但允许comments由任何登录用户写入.

项目

// app/models/item.js
export default DS.Model.extend({
  name: DS.attr('string'),
  description: DS.attr('string'),
  comments: DS.hasMany('comment'),
  user: DS.belongsTo('user')
})

评论

// app/models/comment.js
export default DS.Model.extend({
  user: DS.belongsTo('user')
  body: DS.attr('string'),
  timestamp: DS.attr('string'),
  item: DS.belongsTo('user')
})

保存评论

// app/components/comment-form.js
const comment = this.get('comment');
const item = this.get('item');
// service that tracks the currently logged in user
const currentUser = this.get('sessionManager.user');
comment.set('timestamp', new Date());
comment.set('user', currentUser);

// setup both sides of the relationship
item.get('comments').pushObject(comment);
comment.set('item', item');

// save both
return Ember.RSVP.Promise.all([item.save(), user.save()]);

这一切都很好.今天,我在firebase中添加了安全规则.我只希望当前登录的用户能够编辑项目,但允许任何其他用户向任何项目添加注释.

"items": {
    ".read": "auth !== null",
    "$item_id": {
        // only the currently logged in user can write to this node
        ".write": "root.child('users/'+data.child('user').val()+'/uid').val() === auth.uid",
        // allow any user to write comments
        "comments": {
            ".write": "auth !== null"
        }
    }
},

在firebase模拟器中这是有效的.作为拥有该项目的用户,我可以写信给/items//description.作为不拥有该项目的用户,我可以写信/items//comments/,但不能写信/items//description.然而它在Ember中使用Emberfire失败了.

我的工作理论是,当我向一个我没有"拥有"的项目添加新评论时,我会调用item.save()Emberfire尝试写入/items/.

如何设置Firebase安全规则,以便只有拥有该用户的用户item才能更新其大部分属性,但任何用户都可以添加comment

这是在firebase规则模拟器中:

尝试/items//comments使用不具有此项目项的用户写入数据

{
    "cde": "comment_id"
}

将成功写上述规则.

然而,

尝试/items/使用不具有此项目项的用户写入数据

{
    "comments": {
        "cde": "comment_id"
    }
}

失败.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有