2012-11-07 12 views
8

Trong việc quản lý các thực thể trong Parse, có rất nhiều đối tượng mà tôi cần phải liên kết với người dùng đã đăng nhập hiện tại.An ninh đối tượng trong phân tích cú pháp bằng cách sử dụng API JavaScript - Gắn kết người dùng với các đối tượng được lưu

mối quan tâm của tôi là:

  1. Không có mã phụ trợ đảm bảo rằng User được thông qua tại là hiện tại người dùng đăng nhập.
  2. Người dùng có thể chỉ định bất kỳ đối tượng mới được tạo nào cho người dùng khác.

Họ có this example TODO app mà trong the documentation cho thấy không có đám mây Mã tại chỗ để đảm bảo rằng các User rằng Todo được gán cho là hiện đang đăng nhập người dùng.

Bây giờ tôi xem qua the code Tôi bắt đầu nghĩ rằng bất cứ khi nào một đối tượng được lưu, nó sẽ được liên kết với người dùng. Bất cứ ai có thể giải thích lý do tại sao ứng dụng này hoạt động và cách nó kết hợp các số Todo với số User?

CẬP NHẬT: Không bao giờ, tôi tìm thấy vị trí trong mã của họ nơi họ chỉ định người dùng lưu cho Todo. Câu hỏi của tôi là, điều gì ngăn người dùng viết mã để lưu việc cần làm với id người dùng của người khác?

this.todos.create({ 
     content: this.input.val(), 
     order: this.todos.nextOrder(), 
     done: false, 
     user: Parse.User.current(), 
     ACL:  new Parse.ACL(Parse.User.current()) 
     }); 

CẬP NHẬT # 2: Nếu đối tượng User có một bộ ACL để chỉ cho phép người dùng có thể đọc User đối tượng mà họ sở hữu, sau đó họ sẽ không thể truy vấn để có được một đối tượng người sử dụng bỏ qua. Tuy nhiên, có hai vấn đề khác có thể:

  1. Có thể cho họ để vượt qua ObjectId của người sử dụng thay vì toàn bộ đối tượng User ngay cả khi user lĩnh vực trên bàn Todo s đòi hỏi một _User?
  2. Tôi tin rằng họ cũng có thể tạo đối tượng người dùng mới và chỉ định đối tượng đó ... Tôi đang cố nghĩ về một tình huống mà đây sẽ là vấn đề, nhưng hiện tại tôi không thể.

Nếu bất kỳ ai cũng có thể xác nhận hoặc cung cấp giải pháp cho một trong những người hữu ích. Hãy cố gắng thử nghiệm # 1 ngay bây giờ.

CẬP NHẬT # 3 - Sau một số thử nghiệm:

  1. Nếu user lĩnh vực trên bàn Todo s đòi hỏi một đối tượng _User, nó sẽ không lấy ObjectId như là một chuỗi.
  2. Tuy nhiên, chúng có thể tạo đối tượng người dùng mới và đặt đối tượngId ở đó để giải quyết vấn đề này.

    var user = new Parse.User();  // Create user object 
    user.id = "cqmEuj1Bzf";   // Assign user id 
    
    // Create and save Todo 
    var td = new Todo();    
    td.set("name", "Some ting todo"); 
    td.set("user", user); 
    td.save(); 
    

này đúng ở đây là chính xác những gì tôi đã lo lắng về. Tôi đã lưu thành công một tài khoản Todo vào tài khoản của người dùng khác - miễn là tôi biết user_id của họ (objectId).Với đủ người dùng, họ có khả năng đoán được ít nhất một người dùng để xoay tài khoản của một người ngẫu nhiên.

Vậy bây giờ là gì?

Trả lời: Sử dụng mã đám mây để xác minh rằng người dùng đã chuyển vào khớp với người dùng hiện tại. Câu trả lời đã được đăng trên Parse's forums here.

+0

Hey Tôi chia find của bạn vào câu trả lời riêng của mình để làm cho nó dễ dàng hơn để tìm SO phong cách. – Diogenes

Trả lời

1

Bạn có thể sử dụng mã điện toán đám mây để xác minh rằng người dùng đã qua khớp với người dùng hiện tại. Câu trả lời đó đã được đăng trên Parse's forums here.

Bạn có thể sử dụng Mã đám mây để đảm bảo rằng đối tượngId tương ứng với người dùng hiện tại thực hiện yêu cầu này. Trên thực tế, ứng dụng mẫu của chúng tôi, Anypic, điều này có kiểm tra trên lớp "Ảnh" và "Hoạt động" không.

Từ Mây Mã AnyPic của:

Parse.Cloud.beforeSave('Activity', function(request, response) { var currentUser = Parse.User.current(); var objectUser = request.object.get('fromUser'); 

    if(!currentUser || !objectUser) { 
    response.error('An Activity should have a valid fromUser.'); } else if (currentUser.id === objectUser.id) { 
    response.success(); } else { 
    response.error('Cannot set fromUser on Activity to a user other than the current user.'); } }); 

Parse.Cloud.beforeSave('Photo', function(request, response) { var currentUser = Parse.User.current(); var objectUser = request.object.get('user'); 

    if(!currentUser || !objectUser) { 
    response.error('A Photo should have a valid user.'); } else if (currentUser.id === objectUser.id) { 
    response.success(); } else { 
    response.error('Cannot set user on Photo to a user other than the current user.'); } }); 
Các vấn đề liên quan