2017-09-14 4 views
0

J'ai deux vues différentes et deux contrôleurs différents dans l'application Rails que je souhaite rediriger vers un utilisateur spécifique selon que l'utilisateur est un administrateur ou non.Comment puis-je vérifier l'administrateur de l'utilisateur sur routes.rb dans Rails?

je vis poste SO comme this one où il dirige la page selon que l'utilisateur est authentifié ou non, mais je cherche quelque chose comme ça (je me sers concevoir):

#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" 

Lorsque l'utilisateur se Il vérifie les privilèges d'administrateur de l'utilisateur. Si l'utilisateur est admin, passez au admin/first_page#index. Si l'utilisateur n'est pas administrateur, passez au first_page#index.

Je pensais utiliser une seule page et cacher certaines fonctionnalités pour les non-administrateurs, quelque chose comme: <% if user.admin%><%= secret_admin_feature %><% end %> pour le garder au sec, mais j'ai mes propres raisons pour lesquelles je choisis de ne pas le garder au sec dans ce cas.

Est-il possible de faire une vérification d'admin de routes.rb? Si oui, comment cela peut-il être fait? Si non, quelle est une bonne alternative?

Répondre

0

Je ne pense pas que ce soit une bonne idée de vérifier les privilèges d'administrateur dans les routes. La bonne façon de le faire est comme suit:

  • Vous aurez une méthode appelée application_helperis_admin? qui vérifie si l'utilisateur est un administrateur ou non.

  • Vous allez soumettre votre formulaire de connexion à une certaine méthode. C'est là que vous devrez utiliser l'assistant et rediriger.

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 

Voilà comment je le ferais.

Vous devez toujours fournir la redirection vers la page d'ouverture de session si la soumission de votre formulaire a échoué. Et dans la méthode admin/first_page#index, vous pouvez vérifier si l'utilisateur est administrateur et rediriger vers une autre page, juste pour forcer les utilisateurs non administrateurs à revenir dans leur flux.