我在Rails上使用ActiveAdmin,而我正在尝试锁定网站中将管理员用户维护到非超级用户的部分。
当然,我可以像这样隐藏菜单选项:
ActiveAdmin.register AdminUser do
menu :parent => "Settings", :if => proc { current_admin_user.superuser }
end
但是,如果您绕过菜单并直接转到/ admin / admin_users
,路由仍然有效在ActiveAdmin中锁定管理员的路由和控制器的最佳做法是什么。
答案 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
答案 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