Ruby on rails Activeadmin限制对非超级用户项目的访问
我在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中锁定管理员的路由和控制器的
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
是必要的。