2012-11-07 9 views
8

पार्स में इकाइयों के प्रबंधन में ऐसी कई वस्तुएं हैं जिन्हें मुझे वर्तमान लॉग इन उपयोगकर्ता से जोड़ना है।जावास्क्रिप्ट एपीआई का उपयोग कर पार्स में ऑब्जेक्ट सिक्योरिटी - सहेजे गए ऑब्जेक्ट्स पर उपयोगकर्ताओं को ट्राइंग

मेरे चिंताएं हैं:

  1. वहाँ सुनिश्चित करना है कि User में पारित किया जा रहा कोई बैकएंड कोड है वर्तमान उपयोगकर्ता में लॉग इन किया है।
  2. उपयोगकर्ता अन्य उपयोगकर्ताओं को किसी भी नव निर्मित वस्तुएं असाइन कर सकते हैं।

वे this example TODO app जो the documentation में जगह में कोई बादल कोड से पता चलता है कि यह सुनिश्चित करने के User कि Todo को असाइन किया गया है वर्तमान में उपयोगकर्ता के लॉग इन किया है।

अब जब मैं the code देखता हूं तो मुझे लगता है कि जब भी कोई ऑब्जेक्ट सहेजा जाता है तो यह उपयोगकर्ता से जुड़ा होता है। क्या कोई यह समझा सकता है कि यह एप्लिकेशन क्यों काम करता है और यह एस User के साथ कैसे संबद्ध है?

अद्यतन: कभी नहीं, मुझे उनके कोड में जगह मिली जहां उन्होंने टोडो को बचाने के लिए उपयोगकर्ता निर्दिष्ट किया। मेरा सवाल यह है कि, उपयोगकर्ता को कोड लिखने से क्या रोक रहा है जो किसी और के उपयोगकर्ता आईडी के साथ टोडो बचाता है?

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

अद्यतन # 2: करने के लिए केवल उन User वस्तुओं उनके स्वामित्व वाले को पढ़ने के लिए सक्षम होने के लिए अनुमति देता है User वस्तु एक ACL सेट है है, तो वे किसी अन्य उपयोगकर्ता वस्तु प्राप्त करने के लिए क्वेरी करने के लिए सक्षम नहीं होगा हाथ से जाने देना। हालांकि, दो अन्य संभावित समस्याएं हैं:

  1. भले ही Todo रों मेज पर user क्षेत्र एक _User की आवश्यकता है उन्हें पूरे User वस्तु के स्थान पर उपयोगकर्ता की objectId पारित करने के लिए के लिए यह संभव है?
  2. मेरा मानना ​​है कि वे एक नया उपयोगकर्ता ऑब्जेक्ट भी बना सकते हैं और इसे असाइन कर सकते हैं ... मैं एक परिदृश्य के बारे में सोचने की कोशिश कर रहा हूं जहां यह एक मुद्दा होगा, लेकिन मैं अभी नहीं कर सकता।

यदि कोई भी सहायक हो सकता है तो उन लोगों में से किसी एक को पुष्टि या समाधान प्रदान कर सकता है। अभी # 1 का परीक्षण करने की कोशिश करने जा रहे हैं।

अद्यतन # 3 - कुछ परीक्षण करने के बाद: Todo रों मेज पर user क्षेत्र एक _User वस्तु की आवश्यकता है

  1. है, यह objectId स्ट्रिंग के रूप नहीं ले जाएगा।
  2. हालांकि वे एक नया उपयोगकर्ता ऑब्जेक्ट बना सकते हैं और ऑब्जेक्ट सेट कर सकते हैं।

    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(); 
    

यहाँ यह सही है कि मैं क्या बारे में चिंतित था वास्तव में है। मैं टोडो को दूसरे उपयोगकर्ता के खाते में सफलतापूर्वक सहेजने में सक्षम था - जब तक मैं उनके उपयोगकर्ता_आईडी (objectId) को जानता हूं।पर्याप्त उपयोगकर्ताओं के साथ वे कम से कम एक अनुमान लगा सकते हैं कि किसी के खाते को यादृच्छिक रूप से खराब कर दें।

तो अब क्या?

उत्तर: क्लाउड कोड का उपयोग यह सत्यापित करने के लिए करें कि उपयोगकर्ता वर्तमान उपयोगकर्ता से मेल खाता है। उत्तर Parse's forums here पर पोस्ट किया गया था।

+0

अरे मैं अपनी खोज का अपना जवाब में यह आसान अतः शैली को खोजने के लिए बनाने के लिए अलग हो गए। – Diogenes

उत्तर

1

आप क्लाउड कोड का उपयोग यह सत्यापित करने के लिए कर सकते हैं कि उपयोगकर्ता वर्तमान उपयोगकर्ता से मेल खाता है। वह उत्तर Parse's forums here पर पोस्ट किया गया था।

आप यह सुनिश्चित करने के लिए क्लाउड कोड का उपयोग कर सकते हैं कि ऑब्जेक्ट वर्तमान उपयोगकर्ता इस अनुरोध को करता है। वास्तव में, हमारे नमूना आवेदन, एनीपिक, यह "फोटो" और "गतिविधि" कक्षा पर यह जांच करता है।

Anypic के क्लाउड कोड से:

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.'); } }); 
संबंधित मुद्दे