Ich habe zwei Ember-Modelle: a items
und comments
. Der Benutzer wird einen Artikel veröffentlichen und andere Benutzer können die Artikel kommentieren.Firebase Sicherheitsregeln Emberfire Mehrere Zugriffsebenen pro Knoten
Ich kann nicht Setup-Sicherheitsregeln innerhalb Feuerbasis, die name
und description
erlauben nur den aktuellen Benutzer beschreibbar zu sein, sondern ermöglichen comments
durch alle angemeldeten Benutzer geschrieben werden.
Artikel
// 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')
})
Kommentar
// 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')
})
Speichern Kommentar
// 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()]);
Das alles funktioniert gut. Heute habe ich Sicherheitsregeln in Firebase hinzugefügt. Ich möchte nur, dass der aktuell angemeldete Benutzer in der Lage ist, ein Objekt zu bearbeiten, aber jedem anderen Benutzer erlauben, einem Element einen Kommentar hinzuzufügen.
"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"
}
}
},
Im Firebase-Simulator funktioniert das. Als der Benutzer, der das Element besitzt, kann ich /items/<item_id>/description
schreiben. Als ein Benutzer, der das Element nicht besitzt, kann ich /items/<item_id>/comments/
, aber nicht zu /items/<item_it>/description
schreiben. Es schlägt jedoch innerhalb von Ember mit Emberfire fehl.
Meine Arbeit Theorie ist, dass, wenn ich einen neuen Kommentar zu einem Element hinzufügen, die ich nicht "besitze", dann rufe ich item.save()
Emberfire versucht zu schreiben /items/<item_id>
.
Wie kann ich Setup Firebase Sicherheitsregeln, so dass nur der Benutzer, der die item
besitzt die meisten seiner Eigenschaften aktualisieren kann, aber jeder Benutzer ein comment
hinzufügen Hier ist in der Feuerbasis Regeln Simulator:
Versuch, /items/<item_id>/comments
mit einem Benutzer zu schreiben, die nicht diesen Artikel Artikel nicht besitzen, mit Daten
{
"cde": "comment_id"
}
wird successf schreibe mit den obigen Regeln. Jedoch
,
Versuch, /items/<item_id>
mit einem Benutzer zu schreiben, die nicht diesen Artikel Artikel nicht besitzen, mit Daten
{
"comments": {
"cde": "comment_id"
}
}
ausfällt.
, die auf neue Daten ein guter Punkt, aber es mein Problem nicht lösen. Ich habe den ursprünglichen Beitrag mit weiteren Informationen aus dem Firebase-Simulator aktualisiert. Ich denke, das zeigt, dass Emberfire nach/items schreibt, wenn ich versuche, einen Kommentar zu speichern. –