Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Activeadmin限制对非超级用户项目的访问_Ruby On Rails_Activeadmin - Fatal编程技术网

Ruby on rails Activeadmin限制对非超级用户项目的访问

Ruby on rails Activeadmin限制对非超级用户项目的访问,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,我在Rails上使用ActiveAdmin,并试图锁定站点中维护管理员用户和非超级用户的部分 当然,我可以像这样隐藏菜单选项: ActiveAdmin.register AdminUser do menu :parent => "Settings", :if => proc { current_admin_user.superuser } end 但是,如果您绕过菜单直接转到/admin/admin\u用户,则该路由仍然有效 在ActiveAdmin中锁定管理员的路由和控制器的

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

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

ActiveAdmin.register AdminUser do
  menu :parent => "Settings", :if => proc { current_admin_user.superuser }
end
但是,如果您绕过菜单直接转到/admin/admin\u用户,则该路由仍然有效


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

您是否尝试过cancan:?这里有一个完美示例的要点:

您可以在注册资源的控制器块中添加一个before\u过滤器,这对我很有用:

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

@Tom Power的解决方案很棒,但我建议将其存储在config:
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

如果我们想避免坎坎怎么办?我正在努力找到一种方法来注册资源上的before\u筛选器,以便检查当前的\u user.administrator是否正确?在这个例子中,Cancan似乎有点过火了。因为我是从Google来到这里的,我想指出,这对我来说非常有效,它基本上禁用了任何非superadmin用户的UserAdmin CRUD。对于最新版本的Rails,
before\u filter
应该更改为
before\u action
,不过,其余的都可以正常工作。+1@oxfirst我正在使用
Rails 5.2.2
,将
before\u filter
更改为
before\u action
是必要的。