2012-01-21 13 views
5

में accepts_nested_attributes_for के लिए स्थापित करने के लिए मैं कुछ इस तरह है:कैसे निर्दिष्ट करने के लिए खेतों ActiveRecord

class Profile < ActiveRecord::Base 
    belongs_to :user  
    delegate :full_name, :to => :user 

    accepts_nested_attributes_for :user 
    ....... 

यह काम ठीक के रूप में मैं उपयोगकर्ता में first_name और last_name सेट करने के लिए सक्षम होने के लिए प्रोफ़ाइल चाहते हैं। लेकिन यदि उपयोगकर्ता फॉर्म में अन्य पैरामीटर इंजेक्ट करता है तो यह सुरक्षा खतरे में पड़ता है।

accepts_nested_attributes_for केवल first_name और last_name कैसे लेते हैं और अन्य पैरामीटर छोड़ते हैं?

उत्तर

0

ऐसे दो विकल्प हैं जिन पर मैं सोच सकता हूं और वे वास्तव में वैसे ही हैं जैसे आप एनाफ के बिना बड़े पैमाने पर असाइनमेंट को संभालेंगे।

  1. accepts_nested_attributes_for उपयोगकर्ता मॉडल पर attrs_accessible का सम्मान करेगा। यदि आप निर्दिष्ट करते हैं कि उपयोगकर्ता मॉडल पर बड़े पैमाने पर असाइनमेंट के लिए कोई विशेषता प्रकट नहीं हुई है, तो यह accepts_nested_attributes_for के माध्यम से असाइन नहीं किया जा सकेगा।

  2. आप अपने प्रोफाइल नियंत्रक में स्वच्छता को संभाल सकते हैं। उपयोगकर्ता मॉडल को पारित किए जाने वाले गुण पैराम के अंतर्गत आ जाएंगे [: प्रोफ़ाइल] [: user_attributes]। इसके बाद आप केवल उन गुणों को प्राप्त करने के लिए slice का उपयोग कर सकते हैं, जिन्हें आप अनुमति देना चाहते हैं, या उन गुणों को हटाने के लिए except का उपयोग करें जिन्हें आप अनुमति नहीं देना चाहते हैं। हालांकि मैं श्वेतसूची को ब्लैकलिस्टिंग बनाम अनुशंसित करना पसंद करता हूं।

विकल्प 1 कहीं भी प्रभावित करती है आप उपयोगकर्ता मॉडल के लिए बड़े पैमाने पर काम का उपयोग कर रहे हैं, जबकि विकल्प 2 केवल प्रोफाइल नियंत्रक से आ मापदंडों को प्रभावित करती है

संबंधित मुद्दे