Rails 3 – Active_admin可以使用现有的用户模型吗?

Active Admin可以使用我目前的Devise用户模型吗? 它已经有一个名为admin的列,如果是true ,我想跳过/adminpipe理员login。

这可能吗?

当前路线:

 #Active admin ActiveAdmin.routes(self) #Devise devise_for :admin_users, ActiveAdmin::Devise.config devise_for :users, :path => "account" 

其余的基本上是标准Devise + Activepipe理员

是的,你可以做到这一点,当运行生成器跳过用户模型创build:

 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并为您的pipe理员提供您的身份validation方法,例如:

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

重新启动您的服务器,它应该工作。 另外看看Active Admin Configuration

希望这可以帮助。

如前所述,您将需要更新您的config/initializers/active_admin.rb以反映正确的auth方法。

另外,您还需要更新以下设置:

 # 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 

当然,你不必更新这些(或者后面提到的方法),只是在其他地方重复使用这些方法,但这似乎是最简单/最干净的方法。 您显然需要使用devisevalidation将每个设置( current_USER )中的“user”replace为模型的名称。

我也build议您在这里时更新以下设置:

 # 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 

如果devise config使用的默认HTTP方法设置为:delete ,那么最后一次更改是必需的,除非您更改它,否则它是。 重要的是现在他们已经同步了,因为如果你遵循这些指示,你将使用destroy_user_session_path这是一个已经由destroy_user_session_path定义的path。 否则,您会收到一条消息,指出[GET] / users / sign_out路由不存在。

所有其他人所说的话,以及与http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails- activeadmin和-色器件/

如果您已经实现了admin_user模型(即,现在有“用户”和“admin_user”模型),select恢复为具有单一用户模型的选项,则会在信息中添加一些附加位。 。

其他步骤包括

删除devise_for :admin_users, ActiveAdmin::Devise.config从routes.rb devise_for :admin_users, ActiveAdmin::Devise.config复制代码从app/admin/admin_user.rbapp/admin/user.rb (只使用所需的)删除app/admin/admin_user.rb (或你会得到AdminUser上的一个未初始化的常量错误 )就像这个人(和我一样)。

如果您已经使用默认设置安装了ActiveAdmin,并且想要使用现有模型上的User.is_admin字段对用户进行身份validation,并删除admin_user表,请执行以下过程:

回滚admin_user迁移(如果您在安装Active Admin时没有使用--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中,添加:

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

在active_admin.rb中:

 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. 

要configurationdevise注销通过:get ,添加devise.rb:

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

创buildis_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中,不要忘记在permit_params中添加is_admin。 在app / admin / user.rb中:

 permit_params ....., :is_admin 

在控制台中为pipe理员用户添加权限:

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

请享用

Interesting Posts