2017-09-14 5 views
0

Railsアプリケーションには、ユーザーが管理者であるかどうかに応じて、特定の1つにリダイレクトする2つの異なるビューと2つの異なるコントローラがあります。Railsのroutes.rbでユーザーadminを確認するにはどうすればいいですか?

私を見SOそれは、ユーザーが認証されているかどうかに応じて、ページを指示し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の場合は、admin/first_page#indexにアクセスしてください。ユーザーがadminでない場合は、first_page#indexにアクセスしてください。

私は1つのページだけを使用し、管理者以外のユーザーのために何かを隠していると考えました。<% if user.admin%><%= secret_admin_feature %><% end %>は乾燥した状態に保ちますが、この場合は乾燥しないようにしています。

routes.rbから管理者確認を行うことはできますか?はいの場合、どうすればいいですか?そうでない場合、良い選択肢は何ですか?

答えて

0

私はルート内の管理者特権を確認することをお勧めしません。それは次のようにそれを行うための適切な方法は次のとおりです。

  • あなたは、ユーザーが管理者であるかどうかをチェックするis_admin?と呼ばれるapplication_helperメソッドを持つことになります。

  • あなたはサインインフォームを特定の方法で提出します。ここでは、ヘルパーを使用してリダイレクトする必要があります。私はそれを行うだろうかある

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 

フォームの送信に失敗した場合でも、ログインページにリダイレクトする必要があります。また、admin/first_page#indexメソッドでは、ユーザーがadminで、別のページにリダイレクトして、管理者以外のユーザーを強制的にフローに戻すことができます。

関連する問題