2011-12-02 4 views
47

सक्रिय व्यवस्थापक मेरे वर्तमान उपयोग उपयोगकर्ता मॉडल का उपयोग कर सकते हैं? इसमें पहले से ही admin नामक एक कॉलम है, और यदि यह true है, तो मैं /admin पर जाकर सक्रिय व्यवस्थापक लॉगिन को बाईपास करना चाहता हूं।रेल 3 - क्या Active_admin मौजूदा उपयोगकर्ता मॉडल का उपयोग कर सकता है?

क्या यह संभव है?

वर्तमान मार्गों:

बाकी मूल रूप से मानक वसीयत + सक्रिय व्यवस्थापक है

उत्तर

65

हाँ आप कर सकते हैं कि, जब running the generator उपयोगकर्ता मॉडल बनाना छोड़ सकते:

rails generate active_admin:install --skip-users 

में फिर आपका config/initializers/active_admin.rb:

# == User Authentication 
# 
# Active Admin will automatically call an authentication 
# method in a before filter of all controller actions to 
# ensure that there is a currently logged in admin user. 
# 
# This setting changes the method which Active Admin calls 
# within the controller. 
config.authentication_method = :authenticate_admin! 

टिप्पणी हटाएं config.authentication_method और अपने व्यवस्थापक के लिए अपने प्रमाणीकरण विधि प्रदान करते हैं, उदाहरण के लिए:

# app/controllers/application_controller.rb 
def authenticate_admin! 
redirect_to new_user_session_path unless current_user.is_admin? 
end 

अपने सर्वर को पुनरारंभ करें और यह काम करना चाहिए। Active Admin Configuration

पर एक नज़र डालें, उम्मीद है कि इससे मदद मिलती है।

+8

जहां वास्तव में आप authenticate_admin रखूँ का आनंद लें! तरीका? मैंने एप्लिकेशन नियंत्रक की कोशिश की है लेकिन मुझे मिलता है: अपरिभाषित विधि 'authenticate_admin_user! ' # <व्यवस्थापक :: डैशबोर्ड नियंत्रक के लिए: 0x007fc3a23bce38> –

+1

आप इसे कॉन्फ़िगर/प्रारंभकर्ता/active_admin.rb फ़ाइल में रखेंगे। – jackyalcine

+0

या एप्लिकेशन नियंत्रक में। – domachine

24

जैसा कि पहले बताया गया है, आपको सही लेख विधि को दर्शाने के लिए अपने config/initializers/active_admin.rb को अपडेट करने की आवश्यकता होगी।

साथ ही, हालांकि, आप निम्न सेटिंग को अपडेट करना चाहते हैं:

# This setting changes the method which Active Admin calls 
# to return the currently logged in user. 
config.current_user_method = :current_admin_user 

को

config.current_user_method = :current_user 

और

# This setting changes the path where the link points to. If it's 
# a string, the strings is used as the path. If it's a Symbol, we 
# will call the method to return the path. 
# 
# Default: 
config.logout_link_path = :destroy_admin_user_session_path 

config.logout_link_path = :destroy_user_session_path 
को

बेशक, आपको इन (या पोस्ट में उल्लिखित विधि) को अपडेट करने की ज़रूरत नहीं है, और कहीं और तरीकों से अधिक सवारी करें, लेकिन यह सबसे आसान/साफ-सुथरा दृष्टिकोण प्रतीत होता है। आपको स्पष्ट रूप से devise प्रमाणीकरण का उपयोग कर मॉडल के नाम के साथ प्रत्येक सेटिंग (current_USER) में "उपयोगकर्ता" को प्रतिस्थापित करने की आवश्यकता होगी।

मैं भी अद्यतन करने की सिफारिश करेंगे निम्नलिखित के रूप में अच्छी तरह से सेट करते समय तुम वहाँ में कर रहे हैं: यदि आपके चिंतन करना config द्वारा इस्तेमाल किया डिफ़ॉल्ट HTTP विधि

# This setting changes the http method used when rendering the 
# link. For example :get, :delete, :put, etc.. 
# 
# Default: 
config.logout_link_method = :get 

को
config.logout_link_method = :delete 

यह पिछले परिवर्तन की आवश्यकता है :delete पर सेट है, जो तब तक है जब तक आप इसे बदल नहीं देते। यह मायने रखता है कि अब वे सिंक हो गए हैं क्योंकि यदि आप इन निर्देशों का पालन करते हैं, तो आप destroy_user_session_path का उपयोग करेंगे जो पहले से ही तैयार किए गए पथ हैं। अन्यथा आपको एक संदेश मिलेगा जिसमें कहा गया है कि [GET]/उपयोगकर्ता/sign_out मार्ग मौजूद नहीं है।

+0

यदि आप current_user के साथ current_user_method को अपडेट नहीं करेंगे, तो आप शायद एक फ्लैश देखेंगे "टिप्पणी सहेजी नहीं गई थी, टेक्स्ट खाली था।" ActiveAdmin टिप्पणी निर्माण पर, जहां तक ​​[वर्तमान कार्यान्वयन विफलता के मामले में केवल खाली_टेक्स्ट त्रुटि प्रदान करता है] (https://github.com/activeadmin/activeadmin/blob/50d9893ea60993ef72047f072e5a4bc0c4d24b45/lib/active_admin/orm/active_record/comments.rb# L59)। – rakvium

4

सभी की क्या हर किसी ने कहा है और साथ ही गाइड http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-devise/

पर बाहर रखी है कि सूचना के आधार पर कुछ अतिरिक्त बिट्स कहते हैं यदि आप एक ही उपयोगकर्ता के पास यह विकल्प पर वापस लौटने के लिए चयन कर रहे हैं के साथ संयोजन के रूप में मॉडल जब आपने पहले से ही admin_user मॉडल लागू किया है (यानी अभी आपके पास 'उपयोगकर्ता' है और साथ ही 'admin_user' मॉडल भी है)।

अतिरिक्त कदम

शामिल

app/admin/user.rb करने के लिए app/admin/admin_user.rb से routes.rb नकल कोड से devise_for :admin_users, ActiveAdmin::Devise.config निकाल सकते हैं (केवल का उपयोग क्या आवश्यक है) हटाना app/admin/admin_user.rb (या आप एक Uninitialized constant error on AdminUser मिल जाएगा) की तरह इस आदमी था (और मुझे भी)।

3

यहाँ इस प्रक्रिया आप पहले से ही डिफ़ॉल्ट सेटिंग के साथ ActiveAdmin स्थापित किया है, तो है, और आप अपने मौजूदा मॉडल पर User.is_admin क्षेत्र के साथ उपयोगकर्ताओं को प्रमाणित, और admin_user तालिका निकालना चाहते हैं:

रोलबैक admin_user माइग्रेशन (यदि आप का उपयोग नहीं किया --skip-users जब सक्रिय व्यवस्थापक स्थापित करने):

rake db:migrate:down VERSION=20141205110842 # create_active_admin_comments.rb 
rake db:migrate:down VERSION=20141205110831 # add_devise_to_admin_users.rb 
rake db:migrate:down VERSION=20141205110820 # devise_create_admin_users.rb 

तब उन 3 फ़ाइलों को हटा दें।

मार्ग में,, लाइन devise_for :admin_users, ActiveAdmin::Devise.config

application_controller.rb में हटाने जोड़ें: active_admin.rb में

def authenticate_admin! 
    if current_user && current_user.is_admin 
    # fine 
    else 
    redirect_to new_user_session_path 
    end 
end 

:

config.authentication_method = :authenticate_admin! 
config.current_user_method = :current_user 
config.logout_link_path = :destroy_user_session_path 
config.allow_comments = false 
config.logout_link_method = :get # couldn't get active_admin to sign out via :delete. So I configure devise to sign out via :get. 

वसीयत कॉन्फ़िगर करने के लिए प्रस्थान करने के लिए :get के माध्यम से, devise.rb में जोड़ें:

config.sign_out_via = :get 
# And for every occurrence of destroy_user_session_path, remove the option method: delete. 

is_admin बनाएं माइग्रेशन:

rails g migration add_is_admin_to_user is_admin:boolean 

संपादित करें ताकि तरह माइग्रेशन:

class AddIsAdminToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :is_admin, :boolean, default: false 
    end 
end 

और विस्थापित:

rake db:migrate 

रेल 4 में हैं, में is_admin जोड़ने के लिए भूल नहीं है permit_params। एप्लिकेशन/व्यवस्थापक/user.rb में:

permit_params ....., :is_admin 

एक कंसोल में, व्यवस्थापक उपयोगकर्ताओं के लिए अधिकार जोड़ें:

u = User.find(42); u.is_admin = true; u.save