将ActiveAdmin用户与现有用户模型合并

10
我在项目早期设置了ActiveAdmin,并使用默认的admin_users模型进行身份验证。之后,我使用Devise设置了一个单独的User模型,并意识到将两个表合并可能会更明智,这样管理员就可以在Activeadmin和站点前端执行管理操作。如何配置ActiveAdmin以使用Users模型,可能还需要添加一个标记管理员的列(例如is_admin)或者权限级别来设置管理员和版主呢?
Rails 3.1
ActiveAdmin 0.3.3
Devise 1.4.9
2个回答

9

如果要使用现有的“用户”模型和activeadmin来快速实现此操作的代码块,答案实际上非常简单。在ApplicationController中:

class ApplicationController < ActionController::Base
    def authenticate_admin_user! #use predefined method name
      redirect_to '/' and return if user_signed_in? && !current_user.is_admin? 
      authenticate_user! 
    end 
    def current_admin_user #use predefined method name
      return nil if user_signed_in? && !current_user.is_admin? 
      current_user 
    end 
end

只需使用Devise已经设置好的身份验证功能。 redirect_to是您想要将已登录且没有管理特权的用户发送到的位置。


4

ActiveAdmin可以让您定义自己的身份验证方法。 您可以将用户表迁移,添加一个额外的管理员列,并在其中标记现有的管理员,然后按照指定的方法在config/initializers/active_admin.rb中设置身份验证方法。


+1 是因为我相信你给了我正确的答案。 我假设我要在 application_controller 中构建新方法? 但是,从那里开始,我该怎么做才能集成当前的 Devise 认证,而不覆盖 Devise 设置的现有操作? - Kyle Macey
如果现有的Devise方法适用,则可以将它们作为符号传递给ActiveAdmin。否则,您可以覆盖它们或在对您的应用程序有意义的地方定义新的方法(ApplicationController是一个非常普遍的位置)。 - coreyward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接