Giả sử tôi không muốn khách hàng của tôi có quyền truy cập vào bộ sưu tập, nhưng tôi muốn khách hàng của tôi có thể hỏi một số câu hỏi về các đối tượng trong bộ sưu tập đó. Làm thế nào tôi sẽ đạt được điều này? Ví dụ, giả sử tôi muốn biết nếu hiện tại người dùng đã đăng nhập. Khi người dùng đăng nhập lần đầu, tôi đặt id cơ sở dữ liệu của người dùng đó trong Session
và trong cookie. Hiện tại, ứng dụng cho biết người dùng đã đăng nhập nếu !Session.equals("user_id", null)
, điều này tất nhiên là rất không an toàn vì bây giờ tôi có thể mở firebug và nói Session.set("user_id", "foo")
và giờ tôi đã đăng nhập.Lấy các giá trị từ máy chủ
Tôi không muốn khách hàng có quyền truy cập vào bộ sưu tập Người dùng tại thời điểm này. Mã máy khách duy nhất có quyền truy cập vào bộ sưu tập này được đính kèm trong một chức năng tự thực thi nhằm bảo vệ nó (tôi không chắc đó có phải là cách đúng đắn để thực hiện bảo mật trong Meteor hay không). cũng). Vì vậy, thay vào đó tôi muốn gọi một số mã phía máy chủ và vượt qua nó id được thiết lập trong phiên và có nó cho tôi biết nếu đó là một người dùng hợp lệ hay không.
Đây là cách tôi muốn nhìn thấy nó thiết lập:
// client
function logged_in() {
return SomeServerMethodThatValidatesUserId(Session.get("user_id"));
}
Meteor.methods
dường như không phù hợp với những hóa đơn, vì Meteor.call
thực hiện một cuộc gọi lại không đồng bộ. Mô hình pub/sub trông có vẻ hứa hẹn hơn một chút, nhưng từ tài liệu, tôi không hoàn toàn chắc chắn về cách nó hoạt động.
Dường như đề nghị tôi nên gọi this.set
từ bên trong trình xử lý xuất bản để đặt một số giá trị trên máy khách, nhưng tôi không thể tìm ra nơi các giá trị đó có sẵn.
Hoặc có thể mô hình pub/sub không phù hợp với điều này và có một cách khác mà tôi bị thiếu. Lời khuyên nào được đánh giá cao!
Kiểm tra câu trả lời này bởi một trong các nhà phát triển Meteor: http: // stackoverflow.com/questions/10115042/how-do-you-secure-the-client-side-mongodb-api/10116342 # 10116342 Nó cho thấy làm thế nào để vô hiệu hóa mặc định "bánh xe đào tạo" cho phép khách hàng và máy chủ để thực hiện các lệnh mongo tùy ý. Sau đó, bạn có thể chỉ hiển thị những gì bạn muốn cho máy khách thông qua Meteor.methods và Meteor.publish. Điều này sẽ được đơn giản hóa khi gói auteor Meteor được giải phóng. – rmarscher