如何在Rails中检查routes.rb上的用户admin?

时间:2017-09-14 00:27:44

标签: ruby-on-rails routes admin

我在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进行管理员检查?如果是,怎么办?如果没有,什么是好的选择?

1 个答案:

答案 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 方法中,您可能想要检查用户是否是管理员并重定向到另一个页面,只是为了强制非管理员用户重新进入他们的流程。