9

我有一个使用设备 + 门卫的 Rails 应用程序。我还使用 cancan 进行角色管理。在我的应用程序中,我http://localhost:3000/oauth/applications/new用于注册我的应用程序以获取客户端和机密 ID。目前任何用户都可以通过Web界面注册应用程序以获取客户端和秘密ID,我需要限制访问,以便只有管理员可以注册应用程序。

我在doorkeeper.rb文件中看到了一些代码

# If you want to restrict access to the web interface for adding oauth authorized applications, you need to declare the block below.
  # admin_authenticator do
  #   # Put your admin authentication logic here.
  #   # Example implementation:
  #   Admin.find_by_id(session[:admin_id]) || redirect_to(new_admin_session_url)
  # end

我尝试如下,但没有工作......

admin_authenticator do
  if(current_user)
    current_user.role? :admin
  else
    redirect_to(new_user_session_url)
  end
end

提前致谢......

4

2 回答 2

7

我使用并且效果很好的代码是

admin_authenticator do
  redirect_to new_user_session_url unless current_user && current_user.admin?
end
于 2014-08-05T21:07:15.793 回答
5

好吧,你的逻辑不正确。基本上,您让所有 current_user 都可以访问。你真的想要这样的东西:

admin_authenticator do
  if(current_user && current_user.role?(:admin))
    #do nothing
  else
    redirect_to(new_user_session_url)
  end
end

你也可以做

admin_authenticator do
  if(current_user)
    redirect_to(not_authorized_url) unless current_user.role?(:admin)
  else
    redirect_to(new_user_session_url)
  end
end

这将使您将用户发送到正确的错误页面

于 2013-08-15T16:04:17.230 回答