我有一个Rails 3.2.x应用程序,在后端使用rails_admin
gem。我还使用Devise进行身份验证,并且在User
模型上有一个角色字段,用于说明用户是管理员还是员工。
我想做的是为rails_admin设置一个授权,所以如果你访问http://domain.com/admin只有当current_user.role == "admin"
重定向到我的主控制器索引路径home_index_path
时,它才会允许它
我已经设置了一个初始化器来执行此操作,如果角色不是admin,它确实会拒绝admin访问,但我得到了以下错误:No route matches {:controller=>"home"}
。我想这可能与routes.rb
以及我在routes.rb
中安装RailsAdmin线路的位置有关,但我不确定。最终,这应该检查角色以确保它等于admin。如果不是,则重定向到home_index_path并闪烁一条消息。
非常感谢您的帮助。
rails_admin.rb
RailsAdmin.config do |config|
config.authorize_with do |controller|
unless current_user.role == 'admin'
flash[:error] = "You are not an admin"
redirect_to home_index_path
end
end
end
经过一些谷歌搜索,我发现了一个解决此问题的问题。看起来命名空间不同,所以重定向到`main_app.root_path就成功了。我仍然无法让flash信息正常工作。对此有什么想法吗?
RailsAdmin.config do |config|
config.authorize_with do |controller|
unless current_user.role == 'admin'
redirect_to main_app.root_path
flash[:error] = "You are not an admin"
end
end
end