2012-01-02 15 views
9

के साथ अन्य उपयोगकर्ता के खाते में लॉग इन करें मैं अपने मौजूदा रेल 3.0.9 एप्लिकेशन में switch_user मणि को लागू करने की कोशिश कर रहा हूं। मेरे आवेदन पर दो मॉडल, वे कर रहे हैंडेविस + एक्टिव एडमिन + स्विच उपयोगकर्ता

  1. उपयोगकर्ता कर रहे हैं - मेरे ग्राहकों के खातों के लिए और यह has_oneखाता
  2. AdminUser - यह ActiveAdmin
  3. द्वारा
बनाया गया था

मैंने Users के लिए पहले से ही प्रमाणीकरण प्रमाणीकरण सक्षम कर दिया है और ActiveAdmin भीके साथ बहुत अच्छी तरह से काम कर रहा है। अब मेरे सक्रिय एडमिन इंटरफ़ेस से मैं खाता चुनना चाहता हूं और खाते के स्वामी की तरह ही उन खातों में लॉगिन करना चाहता हूं। स्विच उपयोगकर्ता ठीक काम कर रहा है लेकिन समस्या यह है कि अगर कोई यूआरएल जानता है तो कोई भी उपयोगकर्ता खातों में बस लॉगिन कर सकता है।

http://localhost:3000/switch_user?scope_identifier=user_1

सभी मैं जरूरत अनुमति देते हैं केवल एक AdminUser (अर्थात यदि कोई ActiveAdmin सत्र है) उपयोगकर्ता की खातों का उपयोग करने के लिए।

यह कैसे मेरे /config/initializers/switch_user.rb

SwitchUser.setup do |config| 
    config.controller_guard = lambda { |current_user, request| current_admin_user.nil?} 
    config.redirect_path = lambda { |request, params| "/dashboard" } 
end 

तरह लग रहा है लेकिन मैं इस त्रुटि

NameError in SwitchUserController#set_current_user 

undefined local variable or method `current_admin_user' for main:Object 

मिल मैं सक्रिय व्यवस्थापक सत्र तक पहुँच सकते हैं वहाँ वैसे भी है है? /config/initializers/active_admin.rb

ActiveAdmin.setup do |config| 
    config.site_title = "MyAppName" 
    config.authentication_method = :authenticate_admin_user! 
    config.current_user_method = :current_admin_user 
end 

के लिए

कोड btw अपने आवेदन नियंत्रक में मैं किसी भी तरीकों authenticate_admin_user के लिए, current_admin_user सक्रिय व्यवस्थापक उनके बिना ठीक काम करता है नहीं बनाए हैं।

+0

मैंने लगभग हर चीज की कोशिश की जिसे मैं सोच सकता हूं लेकिन अभी भी कोई भाग्य नहीं है। कृपया कोई और? – randika

उत्तर

2

ठीक है मुझे लगता है कि मुझे switch_user सुरक्षित करने का समाधान मिला है।

config.controller_guard = lambda { |current_user, request, original_user, controller| 
    controller.admin_user_signed_in? 
} 

मूल लैम्ब्डा 2 तर्क हैं: सभी मैंने किया admin_users गुंजाइश

ActiveAdmin.routes(self) 

    devise_for :admin_users, ActiveAdmin::Devise.config do 
    match '/admin/switch_user', :controller => 'switch_user', :action => 'set_current_user' 
    end 
+0

मुझे यह काम करने के लिए प्रतीत नहीं होता है। जब मैं मार्ग बनाती हूं तो मुझे मार्ग भी नहीं दिखता है। क्या आपने इसे सक्रियडमिन के एक नए संस्करण पर आजमाया है? – meatherly

6

अंदर मार्गों बढ़ रहा है आप स्थानीय config/initializers/switch_user.rb संशोधित की जरूरत है। बस अधिक (4 तक) संलग्न करें और इसका उपयोग करें।

रेल सर्वर को पुनरारंभ करना न भूलें :)

+1

यह switch_user दस्तावेज़ में होना चाहिए –

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