我在Rails应用程序中有两个不同的视图和两个不同的控制器,我希望用户根据用户是否是管理员重定向到特定的控制器。
我看到像this one这样的帖子,它根据用户是否经过身份验证来指导页面,但我正在寻找类似的东西(我正在使用设计):
#routes.rb
authenticated :user do
if user.admin
root to: "admin/first_page#index", as: :authenticated_root
else
root to "first_page#index", as: :authenticated_root
end
end
root to: "user/sign_in"
当用户登录时,它会检查用户的管理员权限。如果用户是管理员,请转到admin/first_page#index
。如果用户不是管理员,请转到first_page#index
。
我想过只使用一个页面并为非管理员隐藏某些功能,例如:<% if user.admin%><%= secret_admin_feature %><% end %>
以保持干燥,但我有自己的理由为什么在这种情况下我选择不保持干燥。
是否可以从routes.rb进行管理员检查?如果是,怎么办?如果没有,什么是好的选择?
答案 0 :(得分:0)
我不认为检查路线中的管理员权限是个好主意。正确的做法如下:
您将拥有一个名为application_helper
的{{1}}方法,用于检查用户是否为管理员。
您需要将登录表单提交给某种方法。这是您需要使用帮助和重定向的地方。
is_admin?
我就是这样做的。
如果表单提交失败,您仍需要向登录页面提供重定向。在def sign_in
# submit form and do your stuff here
# and if your form submission was successful you would do something like this:
redirect_to admin_first_page_index_path and return if is_admin?
redirect_to first_page_index_path and return
end
方法中,您可能想要检查用户是否是管理员并重定向到另一个页面,只是为了强制非管理员用户重新进入他们的流程。