对特定路由使用Devise和Rails Admin进行身份验证

时间:2013-03-04 09:51:58

标签: ruby-on-rails devise rails-admin

我将Rails Admin和Devise用于管理员和用户模型。我在用户模型中添加了一列“admin”来表明其身份。

config/routes.rb中,我为/admin

安装了RailsAdmin:Engine

我希望只允许current_user.admin个用户访问/admin,否则会将用户重定向到主页。

如何在最干净的代码中实现这一点?

1 个答案:

答案 0 :(得分:15)

管理员控制器上的

class MyAdminController < ApplicationController
  before_filter :authenticate_user!
  before_filter :require_admin
end
应用程序控制器上的

class ApplicationController < ActionController::Base


  def require_admin
    unless current_user && current_user.role == 'admin'
      flash[:error] = "You are not an admin"
      redirect_to root_path
    end        
  end
end

抱歉,没有注意到它是使用rails admin,你可以这样做:

# in config/initializer/rails_admin.rb

RailsAdmin.config do |config|
  config.authorize_with do |controller|
    unless current_user.try(:admin?)
      flash[:error] = "You are not an admin"
      redirect_to main_app.root_path
    end
  end
end