【问题标题】:Merging ActiveAdmin users with existing user model将 ActiveAdmin 用户与现有用户模型合并
【发布时间】:2012-02-12 23:08:59
【问题描述】:

我在项目的早期设置了 ActiveAdmin,并使用默认的admin_users 模型进行身份验证。从那以后,我使用 Devise 设置了一个单独的用户模型,并意识到合并这两个表可能会更聪明,这样管理员就可以在 Activeadmin 和网站前端进行管理操作。如何将 ActiveAdmin 配置为使用用户模型,并可能使用一列来标记管理员(例如,is_admin 或事件权限级别以使管理员和版主成为管理员)?

Rails 3.1
ActiveAdmin 0.3.3
Devise 1.4.9

【问题讨论】:

    标签: ruby-on-rails-3 authentication model devise activeadmin


    【解决方案1】:

    对于如何使用带有 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 是您要发送已登录但没有管理权限的用户的位置。

    【讨论】:

      【解决方案2】:

      ActiveAdmin 让你define your own authentication methods。您可以迁移您的用户表以添加一个额外的管理员列并在其中标记现有管理员,然后在config/initializers/active_admin.rb 中设置您的身份验证方法(如指定)。

      【讨论】:

      • +1 因为我相信你给了我正确的答案。我假设我在application_controller 中构建了新方法?但是我必须从那里做些什么来集成当前的 Devise 身份验证而不覆盖 devise 设置的现有操作?
      • 如果现有的 Devise 方法有效,您可以将它们作为符号传递给 ActiveAdmin。否则,您可以覆盖它们或在对您的应用程序有意义的地方定义新方法(ApplicationController 是一个很常见的地方)。
      猜你喜欢
      • 2018-02-17
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      相关资源
      最近更新 更多