Activeadmin限制对非超级用户项的访问

时间:2012-05-03 13:18:57

标签: ruby-on-rails activeadmin

我在Rails上使用ActiveAdmin,而我正在尝试锁定网站中将管理员用户维护到非超级用户的部分。

当然,我可以像这样隐藏菜单选项:

ActiveAdmin.register AdminUser do
  menu :parent => "Settings", :if => proc { current_admin_user.superuser }
end

但是,如果您绕过菜单并直接转到/ admin / admin_users

,路由仍然有效

在ActiveAdmin中锁定管理员的路由和控制器的最佳做法是什么。

3 个答案:

答案 0 :(得分:10)

你可以将一个before_filter添加到资源注册的控制器块中,这对我有用:

ActiveAdmin.register User do

  menu :if => proc{ current_user.superadmin? }

  controller do
    before_filter :superadmin_filter

    def superadmin_filter
      raise ActionController::RoutingError.new('Not Found') unless current_user.superadmin?
    end
  end

source

答案 1 :(得分:1)

您是否尝试过cancan:https://github.com/ryanb/cancan?有一个完美的例子:https://gist.github.com/1264060

答案 2 :(得分:0)

@Tom Power的解决方案很棒,但我建议将其存储在配置中:config/initializers/active_admin.rb

ActiveAdmin.setup do |config|
  def ensure_admin!
    raise ActionController::RoutingError.new('Not Found') unless current_user.superadmin?
  end

  config.before_action :ensure_admin!      
end