2012-02-23 8 views
18

मुझे लगता है कि जो सच के लिए अपनी विशेषता is_admin सेट है सिर्फ अपने उपयोगकर्ताओं को अपनी सक्रिय व्यवस्थापक बैकएंड उपयोग करने में सक्षम होना चाहता हूँकैसे व्यवस्थापक उपयोगकर्ताओं के लिए सक्रिय व्यवस्थापक तक पहुँच सीमित करने

कैसे मैं इस करना चाहिए?

"सामान्य" उपयोगकर्ता केवल सक्रिय व्यवस्थापक के लिए साइट पर लॉगिन करने में सक्षम होना चाहिए।

उत्तर

38

config/initializers/active_admin.rb में आप इस तरह के config है:

config.authentication_method = :authenticate_admin_user! 

इसलिए यदि आप एक विधि नामित authenticate_admin_user बनाने! ApplicationController में, ActiveAdmin जांच करेगा कि क्या उपयोगकर्ता व्यवस्थापक पृष्ठों पर जा सकता है या नहीं। इस तरह:

# restrict access to admin module for non-admin users 
def authenticate_admin_user! 
    raise SecurityError unless current_user.try(:admin?) 
end 

और ApplicationController में है कि अपवाद से बचाव (या आप वास्तव में authenticate_admin_user! विधि के अंदर अनुप्रेषित कर सकते हैं)

rescue_from SecurityError do |exception| 
    redirect_to root_url 
end 

और एक और छोटी बात, अगर आप admin_users की जरूरत नहीं है, तो यह config/initializers/active_admin.rb में इस लाइन को बदलने के लिए अच्छा होगा:

config.current_user_method = :current_user 

और वसीयत के साथ डिफ़ॉल्ट पथ व्यवस्थापक के लिए अलग-अलग बनाने के लिए चाहते हो सकता है/गैर-व्यवस्थापक उपयोगकर्ताओं, आप नियंत्रक में after_sign_in_path_for विधि परिभाषित कर सकते हैं तो

# path for redirection after user sign_in, depending on user role 
def after_sign_in_path_for(user) 
    user.admin? ? admin_dashboard_path : root_path 
end 
+0

यह एक अच्छा समाधान की तरह लगता है, bu current_user एप्लिकेशन नियंत्रक के भीतर अनुपलब्ध प्रतीत होता है ... क्या मैं इसे कहीं और नहीं रख सकता? –

+0

मिमी नियंत्रक वास्तव में वह स्थान है जहां इसका सबसे अधिक उपयोग किया जाता है। तो आपके पास क्या समस्या है, यह शून्य या NoMethodError देता है? – alony

+0

यह शून्य लौटाता है; 'अपरिभाषित विधि 'व्यवस्थापक?' शून्य के लिए: नील क्लास '। मैंने .admin को परिभाषित किया है? विधि, तो यह नहीं है। मुझे UserControlller में उपलब्ध नहीं होने वाले current_user के कई मामले मिलते हैं, ऐसा लगता है कि आपको इसे वहां से प्राप्त नहीं करना चाहिए। –

0

"सामान्य" उपयोगकर्ताओं के लिए आपको साइट पर लॉगिन करने के लिए अलग तर्क लिखना चाहिए या शायद मुझे समझ में नहीं आया कि आप उपयोगकर्ताओं को सक्रिय व्यवस्थापक के माध्यम से लॉगिन क्यों करना चाहते हैं। devise का उपयोग कर सक्रिय व्यवस्थापक, बस User नामक एक और मॉडल बनाएं।

+0

नहीं है कि नहीं कर रहा है कि मैं क्या करना चाहते हैं, के बाद से व्यवस्थापक उपयोगकर्ताओं भी साइट के सामने के भाग का उपयोग करने में सक्षम होना चाहिए। मुझे विश्वास है कि केवल एक उपयोगकर्ता मॉडल होना अच्छा अभ्यास है। –