There is a User model, and we want all admins are from users. So the big problem is How to config active_admin to support User model.
Step 1: Migrate table
# ==> File: /db/migrate/xxxx_add_admin_to_users.rb
def change
add_column :users, :admin, :boolean, :null => false, :default => false
end
Step 2: Reconfiguring ActiveAdmin
# ==> File: config/initializers/active_admin.rb
config.authentication_method = :authenticate_admin!
config.current_user_method = :current_user
config.logout_link_path = :destroy_user_session_path
config.logout_link_method = :delete
Step 3: Add Admin Authenticate Function
# ==> File: app/controllers/application_controller.rb
def authenticate_admin!
unless current_user.admin
redirect_to root_path, :alert => "Unauthorized Access!"
end
end
Step 4: Reconfiguring Routes
# ==> File: config/routes.rb
ActiveAdmin.routes(self)
Step 5: Routes With Admin Namespace
# ==> File: config/routes.rb
namespace :admin do
constraints AdminConstraint do
# mount Sidekiq::Web => '/sidekiq'
end
end
# ===> config/initializers/admin_constraint.rb
class AdminConstraint
def self.matches?(request)
current_user = request.env['warden'].user
current_user && current_user.admin?
end
end