2011-09-14 6 views
11

मैंने व्यवस्थापक विशेषता जोड़कर डेविस में व्यवस्थापक भूमिका निभाई।पहले_फिल्टर प्रमाणीकरण_एडमिन का उपयोग करें?

आप मुझे बता सकते हैं कि अगर यह सही तरीके से एक before_filter एक व्यवस्थापक उपयोगकर्ता की आवश्यकता है कि हस्ताक्षर किए जाने बनाने के लिए है:

before_filter :authenticate_admin! 

application_controller

protected 
    unless current_user.try(:admin?)  
    redirect_to :new_user_session_path  
    end 

उत्तर

22
में:

किसी भी नियंत्रक में

इस दृष्टिकोण के साथ जाएं

before_filter :authenticate_user! 
    before_filter do 
    redirect_to new_user_session_path unless current_user && current_user.admin? 
    end 

यह भी सुनिश्चित करता है कि किसी भी मेहमानों को भी साइन इन करने के लिए मजबूर किया जाता है। यह कहीं अधिक है - तुम सिर्फ उदाहरण विधि admin?

तक पहुँचने के लिए
def admin? 
    self.admin == true 
end 

मेरे दृष्टिकोण एक भूमिका विशेषता बना सकते हैं और इरादा भूमिकाओं में से एक सेट के खिलाफ अपने स्ट्रिंग मान की जाँच करने के प्रमाणीकरण के लिए मजबूर करने के लिए डिफ़ॉल्ट विधि को संशोधित करने की जरूरत नहीं है कई बुलियन विशेषताओं को बनाने के बजाय इस तरह लचीला।

+0

धन्यवाद। मैं बाद में कोशिश करूंगा। –

+0

आपका स्वागत है =) –

+1

व्यवस्थापक को परिभाषित करने की कोई आवश्यकता नहीं है ?, अगर व्यवस्थापक कॉलम पहले से ही एक बूलियन है तो आप केवल user.admin को कॉल कर सकते हैं? और यह व्यवस्थापक के बिना स्वचालित रूप से सच या गलत वापस आ जाएगा? उपयोगकर्ता में विधि। – n0denine

1

ऊपर दिए गए उत्तर (माइकल डी सिल्वा द्वारा) को देखते हुए, मुझे उनके द्वारा उपयोग किए गए कोड के साथ कोई समस्या थी। उन्होंने पथ को प्रतीक के रूप में लिखा (:new_user_session_path), लेकिन मुझे इसे नियमित पथ सहायक (new_user_session_path) होने की आवश्यकता थी। जब तक मैंने इसे बदल नहीं दिया, मुझे त्रुटियां मिल रही थीं, कह रही थी कि पथ अमान्य था। (मैं रेल 5 चला रहा हूं।)

आशा है कि यह दूसरों के लिए सहायक होगा!

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