Tôi có hai mô hình Ember: items
và comments
. Người dùng sẽ đăng một mục và những người dùng khác sẽ có thể nhận xét về các mục.Quy tắc bảo mật Firebase Emberfire Nhiều cấp truy cập trên mỗi nút
tôi không thể quy tắc an ninh thiết lập trong căn cứ hỏa lực cho phép name
và description
được ghi bởi chỉ có người dùng hiện tại, nhưng cho phép comments
để được ghi vào bởi bất kỳ người dùng đăng nhập.
mục
// 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')
})
Comment
// 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')
})
Tiết kiệm một lời nhận xét
// 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()]);
Tất cả điều này hoạt động tốt. Hôm nay, tôi đã thêm các quy tắc bảo mật trong firebase. Tôi chỉ muốn người dùng hiện đã đăng nhập có thể chỉnh sửa một mục, nhưng cho phép bất kỳ người dùng nào khác thêm nhận xét vào bất kỳ mục nào.
"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"
}
}
},
Trong trình mô phỏng Firebase, công cụ này hoạt động. Là người sở hữu mục tôi có thể viết cho /items/<item_id>/description
. Là người dùng không sở hữu mục, tôi có thể viết thư cho /items/<item_id>/comments/
, nhưng không thể ghi số /items/<item_it>/description
. Tuy nhiên nó không thành công trong Ember khi sử dụng Emberfire.
Lý thuyết làm việc của tôi là khi tôi thêm nhận xét mới vào một mục tôi không "sở hữu", sau đó tôi gọi item.save()
Emberfire cố gắng viết thư cho /items/<item_id>
.
Làm thế nào tôi có thể thiết lập quy tắc căn cứ hỏa lực an ninh như vậy mà chỉ có người dùng sở hữu item
có thể cập nhật nhất của thuộc tính của nó, nhưng bất kỳ người sử dụng có thể thêm một comment
Đây là là trong các quy tắc mô phỏng căn cứ hỏa lực:
Cố gắng để viết thư cho /items/<item_id>/comments
với một người dùng mà không sở hữu mục mặt hàng này, với các dữ liệu
{
"cde": "comment_id"
}
sẽ successf ully viết với các quy tắc trên.
Tuy nhiên,
Cố gắng để viết thư cho /items/<item_id>
với một người dùng mà không sở hữu mục mặt hàng này, với các dữ liệu
{
"comments": {
"cde": "comment_id"
}
}
thất bại.
Đó là một điểm tốt trên dữ liệu mới, nhưng nó không giải quyết được vấn đề của tôi. Tôi đã cập nhật bài đăng gốc với nhiều thông tin hơn từ trình mô phỏng firebase. Tôi nghĩ rằng điều này chứng minh rằng Emberfire ghi vào/các mục khi tôi cố gắng lưu một bình luận. –