【问题标题】:Activeadmin restrict access to non superuser itemsActiveadmin 限制对非超级用户项目的访问
【发布时间】:2012-05-03 13:18:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails activeadmin


    【解决方案1】:

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

    【讨论】:

    • 自从我从 Google 来到这里后,我想指出这对我来说非常合适,它基本上会为任何非超级管理员用户禁用 UserAdmin CRUD。不过,对于最新的 Rails 版本,before_filter 应该更改为before_action,其余的工作正常。
    • +1 @Oxfist 我正在与 Rails 5.2.2 合作,需要将 before_filter 更改为 before_action
    【解决方案2】:

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

    【讨论】:

    • 如果我们想避免康康怎么办?我正在努力寻找一种在资源上注册 before_filter 的方法,以便我可以检查 current_user.administrator?在这种情况下,康康舞似乎有点矫枉过正。
    【解决方案3】:

    @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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 2012-10-23
      相关资源
      最近更新 更多