4

我在 Rails 上使用 ActiveAdmin,我试图锁定站点中维护管理员用户到非超级用户的部分。

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

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

但是,如果您绕过菜单并直接转到 /admin/admin_users,该路线仍然有效

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

4

3 回答 3

14

您可以将 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

资源

于 2014-06-14T07:42:54.810 回答
1

你试过cancan吗:https ://github.com/ryanb/cancan ?有一个完美例子的要点:https ://gist.github.com/1264060

于 2012-05-03T13:39:17.803 回答
1

@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
于 2019-11-15T13:45:46.510 回答