Je veux qu'une page de mon application web ruby on rails soit inaccessible à l'un de mes modèles STI. J'ai deux modèles typeA et typeB héritant de l'utilisateur. J'ai utilisé le type de colonne dans la table User pour implémenter STI. J'utilise Devise gem pour les sessions utilisateur. Je veux une page Web 'http://localhost:3000/rate' inaccessible à mon utilisateur de typeA. Chaque fois qu'un utilisateur se connecte qui est de type 'typeA', il n'a pas la possibilité de voir le lien 'Rate'. Mais je ne veux pas non plus qu'il puisse accéder à cette page par le lien 'http://localhost:3000/rate'. S'il essaie d'y accéder via ce lien, je veux le signer et le faire se reconnecter. J'ai réussi cela en utilisant un morceau de code dans mon contrôleur avec la méthode spécifique pour 'rate'.Comment rendre certaines pages de mon application ruby on rails inaccessibles à l'un de mes modèles d'utilisateur Devise User?
def rate
if current_user.type == "typeA"
sign_out(current_user)
redirect_to new_user_session_path
else
#Code for User of typeB
end
end
Cela fonctionne, mais je voulais savoir si cela peut se faire une meilleure façon en utilisant before_filter: authenticate_user! ou quelque chose d'autre En ce moment, ma part de before_filter ressemble à ce
before_filter :authenticate_user!, except: [:index, :show]
Est-il possible que je peux faire un changement au code supérieur pour obtenir cette fonctionnalité.
P.S: Peut-être que cela peut être mieux fait si j'avais utilisé des rôles ou d'autres gemmes comme CanCan/Pundit mais il ne me reste plus beaucoup de temps pour soumettre mon projet, donc je ne veux pas entrer dans tout ça.
Je ne veux pas que l'ensemble du contrôleur soit inaccessible à typeA. Je veux seulement que la page "taux" lui soit inaccessible. Il y a d'autres méthodes comme index, create, show etc, qui devraient toujours lui être accessibles.Comment est-ce que je mets ça dans mon code? –
vous pouvez utiliser l'option 'only:' pour le faire 'before_filter {| c | c.confirm_user_type (TypeA)},: only => [: rate] ' – sa77
La page d'erreur que j'obtiens est /Users/Suvajit/Documents/Code/Rails/Mckenzie/app/controllers/dishes_controller.rb:4: syntaxe erreur, inattendu ':', attendez keyword_end .confirm_user_type (TypeA)}: only => [: rate]^ Le code que j'ai utilisé est 'before_filter {| c | c.confirm_user_type (TypeA)},: only => [: rate] ' –